Completed
Push — master ( c5b1f1...ee1c48 )
by Martijn van
04:26 queued 01:46
created
code/model/IpAccess.php 1 patch
Indentation   +157 added lines, -157 removed lines patch added patch discarded remove patch
@@ -13,162 +13,162 @@
 block discarded – undo
13 13
  */
14 14
 class IpAccess extends Object
15 15
 {
16
-    /**
17
-     * @var array
18
-     */
19
-    public $allowedIps = array();
20
-
21
-    /**
22
-     * @config
23
-     * @var array
24
-     */
25
-    private static $allowed_ips = array();
26
-
27
-    /**
28
-     * @var string
29
-     */
30
-    private $ip = '';
31
-
32
-    /**
33
-     * IpAccess constructor.
34
-     *
35
-     * @param string $ip
36
-     * @param array $allowedIps
37
-     */
38
-    public function __construct($ip = '', $allowedIps = array())
39
-    {
40
-        parent::__construct();
41
-        $this->ip = $ip;
42
-
43
-        self::config()->allowed_ips = $allowedIps;
44
-    }
45
-
46
-    /**
47
-     * @param $ip
48
-     */
49
-    public function setIp($ip)
50
-    {
51
-        $this->ip = $ip;
52
-    }
53
-
54
-    /**
55
-     * @return array
56
-     */
57
-    public function getAllowedIps()
58
-    {
59
-        if (!empty($this->allowedIps)) {
60
-            Deprecation::notice('1.1', 'Use the "IpAccess.allowed_ips" config setting instead');
61
-            self::config()->allowed_ips = $this->allowedIps;
62
-        }
63
-        return (array)self::config()->allowed_ips;
64
-    }
65
-
66
-    /**
67
-     * @return bool
68
-     */
69
-    public function isEnabled()
70
-    {
71
-        return (bool)Config::inst()->get('IpAccess', 'enabled');
72
-    }
73
-
74
-    /**
75
-     * @return bool
76
-     */
77
-    public function hasAccess()
78
-    {
79
-        if (!$this->isEnabled() || empty($this->getAllowedIps())) {
80
-            return true;
81
-        }
82
-
83
-        return ($this->matchExact() || $this->matchRange() || $this->matchCIDR() || $this->matchWildCard());
84
-    }
85
-
86
-    /**
87
-     * @param Controller $controller
88
-     * @throws SS_HTTPResponse_Exception
89
-     */
90
-    public function respondNoAccess(Controller $controller)
91
-    {
92
-        $response = null;
93
-        if (class_exists('ErrorPage', true)) {
94
-            $response = ErrorPage::response_for(403);
95
-        }
96
-        $controller->httpError(403, $response ? $response : 'The requested page could not be found.');
97
-    }
98
-
99
-    /**
100
-     * @return string
101
-     */
102
-    public function matchExact()
103
-    {
104
-        return in_array($this->ip, $this->getAllowedIps()) ? $this->ip : '';
105
-    }
106
-
107
-    /**
108
-     * Try to match against a ip range
109
-     * Example : 192.168.1.50-100
110
-     *
111
-     * @return string
112
-     */
113
-    public function matchRange()
114
-    {
115
-        $ranges = array_filter($this->getAllowedIps(), function ($ip) {
116
-            return strstr($ip, '-');
117
-        });
118
-
119
-        $ipFirstPart = substr($this->ip, 0, strrpos($this->ip, '.') + 1);
120
-        $ipLastpart  = substr(strrchr($this->ip, '.'), 1);
121
-
122
-        if (!empty($ranges)) foreach ($ranges as $range) {
123
-            $rangeFirstPart = substr($range, 0, strrpos($range, '.') + 1);
124
-            list ($start, $end) = explode('-', substr(strrchr($range, '.'), 1));
125
-            if ($ipFirstPart === $rangeFirstPart && $ipLastpart >= $start && $ipLastpart <= $end) {
126
-                return $range;
127
-            }
128
-        }
129
-        return '';
130
-    }
131
-
132
-    /**
133
-     * Try to match cidr range
134
-     * Example : 192.168.1.0/24
135
-     *
136
-     * @return string
137
-     */
138
-    public function matchCIDR()
139
-    {
140
-        $ranges = array_filter($this->getAllowedIps(), function ($ip) {
141
-            return strstr($ip, '/');
142
-        });
143
-
144
-        if (!empty($ranges)) foreach ($ranges as $range) {
145
-            list ($net, $mask) = explode('/', $range);
146
-            if ((ip2long($this->ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($net)) {
147
-                return $range;
148
-            }
149
-        }
150
-        return '';
151
-    }
152
-
153
-    /**
154
-     * Try to match against a range that ends with a wildcard *
155
-     * Example : 192.168.1.*
156
-     * Example : 192.168.*
157
-     *
158
-     * @return string
159
-     */
160
-    public function matchWildCard()
161
-    {
162
-        $ranges = array_filter($this->getAllowedIps(), function ($ip) {
163
-            return substr($ip, -1) === '*';
164
-        });
165
-
166
-        if (!empty($ranges)) foreach ($ranges as $range) {
167
-            if (substr($this->ip, 0, strlen(substr($range, 0, -1))) === substr($range, 0, -1)) {
168
-                return $range;
169
-            }
170
-        }
171
-        return '';
172
-    }
16
+	/**
17
+	 * @var array
18
+	 */
19
+	public $allowedIps = array();
20
+
21
+	/**
22
+	 * @config
23
+	 * @var array
24
+	 */
25
+	private static $allowed_ips = array();
26
+
27
+	/**
28
+	 * @var string
29
+	 */
30
+	private $ip = '';
31
+
32
+	/**
33
+	 * IpAccess constructor.
34
+	 *
35
+	 * @param string $ip
36
+	 * @param array $allowedIps
37
+	 */
38
+	public function __construct($ip = '', $allowedIps = array())
39
+	{
40
+		parent::__construct();
41
+		$this->ip = $ip;
42
+
43
+		self::config()->allowed_ips = $allowedIps;
44
+	}
45
+
46
+	/**
47
+	 * @param $ip
48
+	 */
49
+	public function setIp($ip)
50
+	{
51
+		$this->ip = $ip;
52
+	}
53
+
54
+	/**
55
+	 * @return array
56
+	 */
57
+	public function getAllowedIps()
58
+	{
59
+		if (!empty($this->allowedIps)) {
60
+			Deprecation::notice('1.1', 'Use the "IpAccess.allowed_ips" config setting instead');
61
+			self::config()->allowed_ips = $this->allowedIps;
62
+		}
63
+		return (array)self::config()->allowed_ips;
64
+	}
65
+
66
+	/**
67
+	 * @return bool
68
+	 */
69
+	public function isEnabled()
70
+	{
71
+		return (bool)Config::inst()->get('IpAccess', 'enabled');
72
+	}
73
+
74
+	/**
75
+	 * @return bool
76
+	 */
77
+	public function hasAccess()
78
+	{
79
+		if (!$this->isEnabled() || empty($this->getAllowedIps())) {
80
+			return true;
81
+		}
82
+
83
+		return ($this->matchExact() || $this->matchRange() || $this->matchCIDR() || $this->matchWildCard());
84
+	}
85
+
86
+	/**
87
+	 * @param Controller $controller
88
+	 * @throws SS_HTTPResponse_Exception
89
+	 */
90
+	public function respondNoAccess(Controller $controller)
91
+	{
92
+		$response = null;
93
+		if (class_exists('ErrorPage', true)) {
94
+			$response = ErrorPage::response_for(403);
95
+		}
96
+		$controller->httpError(403, $response ? $response : 'The requested page could not be found.');
97
+	}
98
+
99
+	/**
100
+	 * @return string
101
+	 */
102
+	public function matchExact()
103
+	{
104
+		return in_array($this->ip, $this->getAllowedIps()) ? $this->ip : '';
105
+	}
106
+
107
+	/**
108
+	 * Try to match against a ip range
109
+	 * Example : 192.168.1.50-100
110
+	 *
111
+	 * @return string
112
+	 */
113
+	public function matchRange()
114
+	{
115
+		$ranges = array_filter($this->getAllowedIps(), function ($ip) {
116
+			return strstr($ip, '-');
117
+		});
118
+
119
+		$ipFirstPart = substr($this->ip, 0, strrpos($this->ip, '.') + 1);
120
+		$ipLastpart  = substr(strrchr($this->ip, '.'), 1);
121
+
122
+		if (!empty($ranges)) foreach ($ranges as $range) {
123
+			$rangeFirstPart = substr($range, 0, strrpos($range, '.') + 1);
124
+			list ($start, $end) = explode('-', substr(strrchr($range, '.'), 1));
125
+			if ($ipFirstPart === $rangeFirstPart && $ipLastpart >= $start && $ipLastpart <= $end) {
126
+				return $range;
127
+			}
128
+		}
129
+		return '';
130
+	}
131
+
132
+	/**
133
+	 * Try to match cidr range
134
+	 * Example : 192.168.1.0/24
135
+	 *
136
+	 * @return string
137
+	 */
138
+	public function matchCIDR()
139
+	{
140
+		$ranges = array_filter($this->getAllowedIps(), function ($ip) {
141
+			return strstr($ip, '/');
142
+		});
143
+
144
+		if (!empty($ranges)) foreach ($ranges as $range) {
145
+			list ($net, $mask) = explode('/', $range);
146
+			if ((ip2long($this->ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($net)) {
147
+				return $range;
148
+			}
149
+		}
150
+		return '';
151
+	}
152
+
153
+	/**
154
+	 * Try to match against a range that ends with a wildcard *
155
+	 * Example : 192.168.1.*
156
+	 * Example : 192.168.*
157
+	 *
158
+	 * @return string
159
+	 */
160
+	public function matchWildCard()
161
+	{
162
+		$ranges = array_filter($this->getAllowedIps(), function ($ip) {
163
+			return substr($ip, -1) === '*';
164
+		});
165
+
166
+		if (!empty($ranges)) foreach ($ranges as $range) {
167
+			if (substr($this->ip, 0, strlen(substr($range, 0, -1))) === substr($range, 0, -1)) {
168
+				return $range;
169
+			}
170
+		}
171
+		return '';
172
+	}
173 173
 
174 174
 }
Please login to merge, or discard this patch.