Completed
Push — master ( 9cc640...40928c )
by Daniel
9s
created
code/MultiDomainRequestFilter.php 1 patch
Indentation   +50 added lines, -50 removed lines patch added patch discarded remove patch
@@ -9,60 +9,60 @@
 block discarded – undo
9 9
 class MultiDomainRequestFilter implements RequestFilter
10 10
 {
11 11
 
12
-    /**
13
-     * Gets the active domain, and sets its URL to the native one, with a vanity
14
-     * URL in the request
15
-     *
16
-     * @param  SS_HTTPRequest $request
17
-     * @param  Session        $session
18
-     * @param  DataModel      $model
19
-     */
20
-    public function preRequest(SS_HTTPRequest $request, Session $session, DataModel $model)
21
-    {
12
+	/**
13
+	 * Gets the active domain, and sets its URL to the native one, with a vanity
14
+	 * URL in the request
15
+	 *
16
+	 * @param  SS_HTTPRequest $request
17
+	 * @param  Session        $session
18
+	 * @param  DataModel      $model
19
+	 */
20
+	public function preRequest(SS_HTTPRequest $request, Session $session, DataModel $model)
21
+	{
22 22
 
23
-        if (Director::is_cli()) {
24
-            return;
25
-        }
23
+		if (Director::is_cli()) {
24
+			return;
25
+		}
26 26
         
27
-        // Not the best place for validation, but _config.php is too early.
28
-        if (!MultiDomain::get_primary_domain()) {
29
-            throw new Exception('MultiDomain must define a "'.MultiDomain::KEY_PRIMARY.'" domain in the config, under "domains"');
30
-        }
27
+		// Not the best place for validation, but _config.php is too early.
28
+		if (!MultiDomain::get_primary_domain()) {
29
+			throw new Exception('MultiDomain must define a "'.MultiDomain::KEY_PRIMARY.'" domain in the config, under "domains"');
30
+		}
31 31
                     
32
-        foreach (MultiDomain::get_all_domains() as $domain) {
33
-            if (!$domain->isActive()) {
34
-                continue;
35
-            }
32
+		foreach (MultiDomain::get_all_domains() as $domain) {
33
+			if (!$domain->isActive()) {
34
+				continue;
35
+			}
36 36
             
37
-            $url = $this->createNativeURLForDomain($domain);
38
-            $parts = explode('?', $url);
39
-            $request->setURL($parts[0]);
40
-        }
41
-    }
37
+			$url = $this->createNativeURLForDomain($domain);
38
+			$parts = explode('?', $url);
39
+			$request->setURL($parts[0]);
40
+		}
41
+	}
42 42
 
43
-    /**
44
-     * Post request noop
45
-     * @param  SS_HTTPRequest  $request
46
-     * @param  SS_HTTPResponse $response
47
-     * @param  DataModel       $model
48
-     */
49
-    public function postRequest(SS_HTTPRequest $request, SS_HTTPResponse $response, DataModel $model)
50
-    {
51
-    }
43
+	/**
44
+	 * Post request noop
45
+	 * @param  SS_HTTPRequest  $request
46
+	 * @param  SS_HTTPResponse $response
47
+	 * @param  DataModel       $model
48
+	 */
49
+	public function postRequest(SS_HTTPRequest $request, SS_HTTPResponse $response, DataModel $model)
50
+	{
51
+	}
52 52
 
53
-    /**
54
-     * Creates a native URL for a domain. This functionality is abstracted so
55
-     * that other modules can overload it, e.g. translatable modules that
56
-     * have their own custom URLs.
57
-     *
58
-     * @param  MultiDomainDomain $domain
59
-     * @return string
60
-     */
61
-    protected function createNativeURLForDomain(MultiDomainDomain $domain)
62
-    {
63
-        return Controller::join_links(
64
-            Director::baseURL(),
65
-            $domain->getNativeURL($_SERVER['REQUEST_URI'])
66
-        );
67
-    }
53
+	/**
54
+	 * Creates a native URL for a domain. This functionality is abstracted so
55
+	 * that other modules can overload it, e.g. translatable modules that
56
+	 * have their own custom URLs.
57
+	 *
58
+	 * @param  MultiDomainDomain $domain
59
+	 * @return string
60
+	 */
61
+	protected function createNativeURLForDomain(MultiDomainDomain $domain)
62
+	{
63
+		return Controller::join_links(
64
+			Director::baseURL(),
65
+			$domain->getNativeURL($_SERVER['REQUEST_URI'])
66
+		);
67
+	}
68 68
 }
Please login to merge, or discard this patch.
code/MultiDomain.php 2 patches
Indentation   +63 added lines, -63 removed lines patch added patch discarded remove patch
@@ -10,75 +10,75 @@
 block discarded – undo
10 10
 class MultiDomain extends Object
11 11
 {
12 12
 
13
-    /**
14
-     * The key for the "primary" domain
15
-     */
16
-    const KEY_PRIMARY = 'primary';
13
+	/**
14
+	 * The key for the "primary" domain
15
+	 */
16
+	const KEY_PRIMARY = 'primary';
17 17
 
18
-    /**
19
-     * Given a url, get the domain that maps to it, e.g.
20
-     *
21
-     * /company/ -> silverstripe.com
22
-     * /company/partners -> silverstripe.com
23
-     * /community/forum -> silverstripe.org
24
-     *
25
-     * @param  string $url
26
-     * @return MultiDomainDomain
27
-     */
28
-    public static function domain_for_url($url)
29
-    {
30
-        $url = trim($url, '/');
18
+	/**
19
+	 * Given a url, get the domain that maps to it, e.g.
20
+	 *
21
+	 * /company/ -> silverstripe.com
22
+	 * /company/partners -> silverstripe.com
23
+	 * /community/forum -> silverstripe.org
24
+	 *
25
+	 * @param  string $url
26
+	 * @return MultiDomainDomain
27
+	 */
28
+	public static function domain_for_url($url)
29
+	{
30
+		$url = trim($url, '/');
31 31
 
32
-        foreach (self::get_all_domains() as $domain) {
33
-            if ($domain->hasURL($url)) {
34
-                return $domain;
35
-            }
36
-        }
32
+		foreach (self::get_all_domains() as $domain) {
33
+			if ($domain->hasURL($url)) {
34
+				return $domain;
35
+			}
36
+		}
37 37
 
38
-        return self::get_primary_domain();
39
-    }
38
+		return self::get_primary_domain();
39
+	}
40 40
 
41
-    /**
42
-     * Gets all the domains that have been configured
43
-     *
44
-     * @param  boolean $includePrimary If true, include the primary domain
45
-     * @return array
46
-     */
47
-    public static function get_all_domains($includePrimary = false)
48
-    {
49
-        $domains = array ();
41
+	/**
42
+	 * Gets all the domains that have been configured
43
+	 *
44
+	 * @param  boolean $includePrimary If true, include the primary domain
45
+	 * @return array
46
+	 */
47
+	public static function get_all_domains($includePrimary = false)
48
+	{
49
+		$domains = array ();
50 50
 
51
-        foreach (self::config()->domains as $key => $config) {
52
-            if (!$includePrimary && $key === self::KEY_PRIMARY) {
53
-                continue;
54
-            }
55
-            $domains[] = MultiDomainDomain::create($key, $config);
56
-        }
51
+		foreach (self::config()->domains as $key => $config) {
52
+			if (!$includePrimary && $key === self::KEY_PRIMARY) {
53
+				continue;
54
+			}
55
+			$domains[] = MultiDomainDomain::create($key, $config);
56
+		}
57 57
 
58
-        return $domains;
59
-    }
58
+		return $domains;
59
+	}
60 60
 
61
-    /**
62
-     * Gets the domain marked as "primary"
63
-     * @return MultiDomainDomain
64
-     */
65
-    public static function get_primary_domain()
66
-    {
67
-        return self::get_domain(self::KEY_PRIMARY);
68
-    }
61
+	/**
62
+	 * Gets the domain marked as "primary"
63
+	 * @return MultiDomainDomain
64
+	 */
65
+	public static function get_primary_domain()
66
+	{
67
+		return self::get_domain(self::KEY_PRIMARY);
68
+	}
69 69
 
70
-    /**
71
-     * Gets a domain by its key, e.g. 'org','com'
72
-     * @param  string $domain
73
-     * @return MultiDomainDomain
74
-     */
75
-    public static function get_domain($domain)
76
-    {
77
-        if (isset(self::config()->domains[$domain])) {
78
-            return MultiDomainDomain::create(
79
-                $domain,
80
-                self::config()->domains[$domain]
81
-            );
82
-        }
83
-    }
70
+	/**
71
+	 * Gets a domain by its key, e.g. 'org','com'
72
+	 * @param  string $domain
73
+	 * @return MultiDomainDomain
74
+	 */
75
+	public static function get_domain($domain)
76
+	{
77
+		if (isset(self::config()->domains[$domain])) {
78
+			return MultiDomainDomain::create(
79
+				$domain,
80
+				self::config()->domains[$domain]
81
+			);
82
+		}
83
+	}
84 84
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -46,7 +46,7 @@
 block discarded – undo
46 46
      */
47 47
     public static function get_all_domains($includePrimary = false)
48 48
     {
49
-        $domains = array ();
49
+        $domains = array();
50 50
 
51 51
         foreach (self::config()->domains as $key => $config) {
52 52
             if (!$includePrimary && $key === self::KEY_PRIMARY) {
Please login to merge, or discard this patch.
code/MultiDomainDomain.php 2 patches
Indentation   +271 added lines, -271 removed lines patch added patch discarded remove patch
@@ -9,275 +9,275 @@
 block discarded – undo
9 9
 class MultiDomainDomain extends Object
10 10
 {
11 11
 
12
-    /**
13
-     * The hostname of the domain, e.g. silverstripe.org
14
-     * @var string
15
-     */
16
-    protected $hostname;
17
-
18
-    /**
19
-     * The path that the hostname resolves to
20
-     * @var string
21
-     */
22
-    protected $url;
23
-
24
-    /**
25
-     * The identifier of the domain, e.g. 'org','com'
26
-     * @var string
27
-     */
28
-    protected $key;
29
-
30
-    /**
31
-     * Paths that are allowed to be accessed on the primary domain
32
-     * @var array
33
-     */
34
-    protected $allowedPaths;
35
-
36
-    /**
37
-     * Paths that are forced from the primary domain into a vanity one,
38
-     * outside the resolves_to path
39
-     *
40
-     * @var array
41
-     */
42
-    protected $forcedPaths;
43
-
44
-    /**
45
-     * The request URI
46
-     *
47
-     * @var string
48
-     */
49
-    protected $requestUri;
50
-
51
-    /**
52
-     * The request HTTP HOST
53
-     *
54
-     * @var string
55
-     */
56
-    protected $httpHost;
57
-
58
-    /**
59
-     * Constructor. Takes a key for the domain and its array of settings from the config
60
-     * @param string $key
61
-     * @param array $config
62
-     */
63
-    public function __construct($key, $config)
64
-    {
65
-        $this->key = $key;
66
-        $this->hostname = $config['hostname'];
67
-        $this->url = isset($config['resolves_to']) ? $config['resolves_to'] : null;
68
-
69
-        $globalAllowed = (array) Config::inst()->get('MultiDomain', 'allow');
70
-        $globalForced = (array) Config::inst()->get('MultiDomain', 'force');
71
-        $myAllowed = isset($config['allow']) ? $config['allow'] : array ();
72
-        $myForced = isset($config['force']) ? $config['force'] : array ();
73
-        $this->allowedPaths = array_merge($globalAllowed, $myAllowed);
74
-        $this->forcedPaths = array_merge($globalForced, $myForced);
75
-
76
-        parent::__construct();
77
-    }
78
-
79
-    /**
80
-     * Gets the hostname for the domain
81
-     * @return string
82
-     */
83
-    public function getHostname()
84
-    {
85
-        return defined($this->hostname) ? constant($this->hostname) : $this->hostname;
86
-    }
87
-
88
-    /**
89
-     * Gets the path that the hostname resolves to
90
-     * @return string
91
-     */
92
-    public function getURL()
93
-    {
94
-        return $this->url;
95
-    }
96
-
97
-    /**
98
-     * Returns true if the domain is currently in the HTTP_HOST
99
-     * @return boolean
100
-     */
101
-    public function isActive()
102
-    {
103
-        if ($this->isAllowedPath($this->getRequestUri())) {
104
-            return false;
105
-        }
106
-
107
-        $currentHost = $this->getHttpHost();
108
-        if (strpos(':', $currentHost) !== false) {
109
-            list($currentHost, $currentPort) = explode(':', $currentHost, 2);
110
-        }
111
-
112
-        $allow_subdomains = MultiDomain::config()->allow_subdomains;
113
-        $hostname = $this->getHostname();
114
-
115
-        return $allow_subdomains ?
116
-                    (bool) preg_match('/(\.|^)'.$hostname.'$/', $currentHost) :
117
-                    ($currentHost == $hostname);
118
-    }
119
-
120
-    /**
121
-     * Returns true if this domain is the primary domain
122
-     * @return boolean
123
-     */
124
-    public function isPrimary()
125
-    {
126
-        return $this->key === MultiDomain::KEY_PRIMARY;
127
-    }
128
-
129
-    /**
130
-     * Gets the native URL for a vanity domain, e.g. /partners/ for .com
131
-     * returns /company/partners when .com is mapped to /company/.
132
-     *
133
-     * @param  string $url
134
-     * @return string
135
-     */
136
-    public function getNativeURL($url)
137
-    {
138
-        if ($this->isPrimary()) {
139
-            throw new Exception("Cannot convert a native URL on the primary domain");
140
-        }
141
-
142
-        if ($this->isAllowedPath($url) || $this->isForcedPath($url)) {
143
-            return $url;
144
-        }
145
-
146
-        return Controller::join_links($this->getURL(), $url);
147
-    }
148
-
149
-    /**
150
-     * Gets the vanity URL given a native URL. /company/partners returns /partners/
151
-     * when .com is mapped to /company/.
152
-     *
153
-     * @param  string $url
154
-     * @return string
155
-     */
156
-    public function getVanityURL($url)
157
-    {
158
-        if ($this->isPrimary() || $this->isAllowedPath($url)) {
159
-            return $url;
160
-        }
161
-
162
-        $domainUrl = str_replace('/', '\/', $this->getURL());
163
-        return preg_replace('/^\/?' . $domainUrl . '\//', '', $url);
164
-    }
165
-
166
-    /**
167
-     * Return true if this domain contains the given URL
168
-     * @param  string  $url
169
-     * @return boolean
170
-     */
171
-    public function hasURL($url)
172
-    {
173
-        if ($this->isForcedPath($url)) {
174
-            return true;
175
-        }
176
-        $domainBaseURL = trim($this->getURL(), '/');
177
-        if (preg_match('/^'.$domainBaseURL.'/', $url)) {
178
-            return true;
179
-        }
180
-
181
-        return false;
182
-    }
183
-
184
-    /**
185
-     * Returns the key/identifier for this domain
186
-     *
187
-     * @return string
188
-     */
189
-    public function getKey()
190
-    {
191
-        return $this->key;
192
-    }
193
-
194
-    /**
195
-     * Set the request URI
196
-     *
197
-     * @param  string $requestUri
198
-     * @return $this
199
-     */
200
-    public function setRequestUri($requestUri)
201
-    {
202
-        $this->requestUri = (string) $requestUri;
203
-        return $this;
204
-    }
205
-
206
-    /**
207
-     * Return the current request URI, defaulting to retrieving it from the $_SERVER superglobal
208
-     *
209
-     * @return string
210
-     */
211
-    public function getRequestUri()
212
-    {
213
-        return $this->requestUri ?: $_SERVER['REQUEST_URI'];
214
-    }
215
-
216
-    /**
217
-     * Set the HTTP host in the request
218
-     *
219
-     * @param  string $httpHost
220
-     * @return $this
221
-     */
222
-    public function setHttpHost($httpHost)
223
-    {
224
-        $this->httpHost = (string) $httpHost;
225
-        return $this;
226
-    }
227
-
228
-    /**
229
-     * Return the current HTTP host, defaulting to retrieving it from the $_SERVER superglobal
230
-     *
231
-     * @return string
232
-     */
233
-    public function getHttpHost()
234
-    {
235
-        return $this->httpHost ?: $_SERVER['HTTP_HOST'];
236
-    }
237
-
238
-    /**
239
-     * Checks a given list of wildcard patterns to see if a path is allowed
240
-     * @param  string  $url
241
-     * @return boolean
242
-     */
243
-    protected function isAllowedPath($url)
244
-    {
245
-        return self::match_url($url, $this->allowedPaths);
246
-    }
247
-
248
-    /**
249
-     * Checks a given list of wildcard patterns to see if a path is allowed
250
-     * @param  string  $url
251
-     * @return boolean
252
-     */
253
-    protected function isForcedPath($url)
254
-    {
255
-        return self::match_url($url, $this->forcedPaths);
256
-    }
257
-
258
-    /**
259
-     * Matches a URL against a list of wildcard patterns
260
-     * @param  string $url
261
-     * @param  array $patterns
262
-     * @return boolean
263
-     */
264
-    protected static function match_url($url, $patterns)
265
-    {
266
-        if (!is_array($patterns)) {
267
-            return false;
268
-        }
269
-
270
-        $url = ltrim($url, '/');
271
-        if (substr($url, -1) !== '/') {
272
-            $url .= '/';
273
-        }
274
-
275
-        foreach ($patterns as $pattern) {
276
-            if (fnmatch($pattern, $url)) {
277
-                return true;
278
-            }
279
-        }
280
-
281
-        return false;
282
-    }
12
+	/**
13
+	 * The hostname of the domain, e.g. silverstripe.org
14
+	 * @var string
15
+	 */
16
+	protected $hostname;
17
+
18
+	/**
19
+	 * The path that the hostname resolves to
20
+	 * @var string
21
+	 */
22
+	protected $url;
23
+
24
+	/**
25
+	 * The identifier of the domain, e.g. 'org','com'
26
+	 * @var string
27
+	 */
28
+	protected $key;
29
+
30
+	/**
31
+	 * Paths that are allowed to be accessed on the primary domain
32
+	 * @var array
33
+	 */
34
+	protected $allowedPaths;
35
+
36
+	/**
37
+	 * Paths that are forced from the primary domain into a vanity one,
38
+	 * outside the resolves_to path
39
+	 *
40
+	 * @var array
41
+	 */
42
+	protected $forcedPaths;
43
+
44
+	/**
45
+	 * The request URI
46
+	 *
47
+	 * @var string
48
+	 */
49
+	protected $requestUri;
50
+
51
+	/**
52
+	 * The request HTTP HOST
53
+	 *
54
+	 * @var string
55
+	 */
56
+	protected $httpHost;
57
+
58
+	/**
59
+	 * Constructor. Takes a key for the domain and its array of settings from the config
60
+	 * @param string $key
61
+	 * @param array $config
62
+	 */
63
+	public function __construct($key, $config)
64
+	{
65
+		$this->key = $key;
66
+		$this->hostname = $config['hostname'];
67
+		$this->url = isset($config['resolves_to']) ? $config['resolves_to'] : null;
68
+
69
+		$globalAllowed = (array) Config::inst()->get('MultiDomain', 'allow');
70
+		$globalForced = (array) Config::inst()->get('MultiDomain', 'force');
71
+		$myAllowed = isset($config['allow']) ? $config['allow'] : array ();
72
+		$myForced = isset($config['force']) ? $config['force'] : array ();
73
+		$this->allowedPaths = array_merge($globalAllowed, $myAllowed);
74
+		$this->forcedPaths = array_merge($globalForced, $myForced);
75
+
76
+		parent::__construct();
77
+	}
78
+
79
+	/**
80
+	 * Gets the hostname for the domain
81
+	 * @return string
82
+	 */
83
+	public function getHostname()
84
+	{
85
+		return defined($this->hostname) ? constant($this->hostname) : $this->hostname;
86
+	}
87
+
88
+	/**
89
+	 * Gets the path that the hostname resolves to
90
+	 * @return string
91
+	 */
92
+	public function getURL()
93
+	{
94
+		return $this->url;
95
+	}
96
+
97
+	/**
98
+	 * Returns true if the domain is currently in the HTTP_HOST
99
+	 * @return boolean
100
+	 */
101
+	public function isActive()
102
+	{
103
+		if ($this->isAllowedPath($this->getRequestUri())) {
104
+			return false;
105
+		}
106
+
107
+		$currentHost = $this->getHttpHost();
108
+		if (strpos(':', $currentHost) !== false) {
109
+			list($currentHost, $currentPort) = explode(':', $currentHost, 2);
110
+		}
111
+
112
+		$allow_subdomains = MultiDomain::config()->allow_subdomains;
113
+		$hostname = $this->getHostname();
114
+
115
+		return $allow_subdomains ?
116
+					(bool) preg_match('/(\.|^)'.$hostname.'$/', $currentHost) :
117
+					($currentHost == $hostname);
118
+	}
119
+
120
+	/**
121
+	 * Returns true if this domain is the primary domain
122
+	 * @return boolean
123
+	 */
124
+	public function isPrimary()
125
+	{
126
+		return $this->key === MultiDomain::KEY_PRIMARY;
127
+	}
128
+
129
+	/**
130
+	 * Gets the native URL for a vanity domain, e.g. /partners/ for .com
131
+	 * returns /company/partners when .com is mapped to /company/.
132
+	 *
133
+	 * @param  string $url
134
+	 * @return string
135
+	 */
136
+	public function getNativeURL($url)
137
+	{
138
+		if ($this->isPrimary()) {
139
+			throw new Exception("Cannot convert a native URL on the primary domain");
140
+		}
141
+
142
+		if ($this->isAllowedPath($url) || $this->isForcedPath($url)) {
143
+			return $url;
144
+		}
145
+
146
+		return Controller::join_links($this->getURL(), $url);
147
+	}
148
+
149
+	/**
150
+	 * Gets the vanity URL given a native URL. /company/partners returns /partners/
151
+	 * when .com is mapped to /company/.
152
+	 *
153
+	 * @param  string $url
154
+	 * @return string
155
+	 */
156
+	public function getVanityURL($url)
157
+	{
158
+		if ($this->isPrimary() || $this->isAllowedPath($url)) {
159
+			return $url;
160
+		}
161
+
162
+		$domainUrl = str_replace('/', '\/', $this->getURL());
163
+		return preg_replace('/^\/?' . $domainUrl . '\//', '', $url);
164
+	}
165
+
166
+	/**
167
+	 * Return true if this domain contains the given URL
168
+	 * @param  string  $url
169
+	 * @return boolean
170
+	 */
171
+	public function hasURL($url)
172
+	{
173
+		if ($this->isForcedPath($url)) {
174
+			return true;
175
+		}
176
+		$domainBaseURL = trim($this->getURL(), '/');
177
+		if (preg_match('/^'.$domainBaseURL.'/', $url)) {
178
+			return true;
179
+		}
180
+
181
+		return false;
182
+	}
183
+
184
+	/**
185
+	 * Returns the key/identifier for this domain
186
+	 *
187
+	 * @return string
188
+	 */
189
+	public function getKey()
190
+	{
191
+		return $this->key;
192
+	}
193
+
194
+	/**
195
+	 * Set the request URI
196
+	 *
197
+	 * @param  string $requestUri
198
+	 * @return $this
199
+	 */
200
+	public function setRequestUri($requestUri)
201
+	{
202
+		$this->requestUri = (string) $requestUri;
203
+		return $this;
204
+	}
205
+
206
+	/**
207
+	 * Return the current request URI, defaulting to retrieving it from the $_SERVER superglobal
208
+	 *
209
+	 * @return string
210
+	 */
211
+	public function getRequestUri()
212
+	{
213
+		return $this->requestUri ?: $_SERVER['REQUEST_URI'];
214
+	}
215
+
216
+	/**
217
+	 * Set the HTTP host in the request
218
+	 *
219
+	 * @param  string $httpHost
220
+	 * @return $this
221
+	 */
222
+	public function setHttpHost($httpHost)
223
+	{
224
+		$this->httpHost = (string) $httpHost;
225
+		return $this;
226
+	}
227
+
228
+	/**
229
+	 * Return the current HTTP host, defaulting to retrieving it from the $_SERVER superglobal
230
+	 *
231
+	 * @return string
232
+	 */
233
+	public function getHttpHost()
234
+	{
235
+		return $this->httpHost ?: $_SERVER['HTTP_HOST'];
236
+	}
237
+
238
+	/**
239
+	 * Checks a given list of wildcard patterns to see if a path is allowed
240
+	 * @param  string  $url
241
+	 * @return boolean
242
+	 */
243
+	protected function isAllowedPath($url)
244
+	{
245
+		return self::match_url($url, $this->allowedPaths);
246
+	}
247
+
248
+	/**
249
+	 * Checks a given list of wildcard patterns to see if a path is allowed
250
+	 * @param  string  $url
251
+	 * @return boolean
252
+	 */
253
+	protected function isForcedPath($url)
254
+	{
255
+		return self::match_url($url, $this->forcedPaths);
256
+	}
257
+
258
+	/**
259
+	 * Matches a URL against a list of wildcard patterns
260
+	 * @param  string $url
261
+	 * @param  array $patterns
262
+	 * @return boolean
263
+	 */
264
+	protected static function match_url($url, $patterns)
265
+	{
266
+		if (!is_array($patterns)) {
267
+			return false;
268
+		}
269
+
270
+		$url = ltrim($url, '/');
271
+		if (substr($url, -1) !== '/') {
272
+			$url .= '/';
273
+		}
274
+
275
+		foreach ($patterns as $pattern) {
276
+			if (fnmatch($pattern, $url)) {
277
+				return true;
278
+			}
279
+		}
280
+
281
+		return false;
282
+	}
283 283
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -5 removed lines patch added patch discarded remove patch
@@ -68,8 +68,8 @@  discard block
 block discarded – undo
68 68
 
69 69
         $globalAllowed = (array) Config::inst()->get('MultiDomain', 'allow');
70 70
         $globalForced = (array) Config::inst()->get('MultiDomain', 'force');
71
-        $myAllowed = isset($config['allow']) ? $config['allow'] : array ();
72
-        $myForced = isset($config['force']) ? $config['force'] : array ();
71
+        $myAllowed = isset($config['allow']) ? $config['allow'] : array();
72
+        $myForced = isset($config['force']) ? $config['force'] : array();
73 73
         $this->allowedPaths = array_merge($globalAllowed, $myAllowed);
74 74
         $this->forcedPaths = array_merge($globalForced, $myForced);
75 75
 
@@ -113,8 +113,7 @@  discard block
 block discarded – undo
113 113
         $hostname = $this->getHostname();
114 114
 
115 115
         return $allow_subdomains ?
116
-                    (bool) preg_match('/(\.|^)'.$hostname.'$/', $currentHost) :
117
-                    ($currentHost == $hostname);
116
+                    (bool) preg_match('/(\.|^)'.$hostname.'$/', $currentHost) : ($currentHost == $hostname);
118 117
     }
119 118
 
120 119
     /**
@@ -160,7 +159,7 @@  discard block
 block discarded – undo
160 159
         }
161 160
 
162 161
         $domainUrl = str_replace('/', '\/', $this->getURL());
163
-        return preg_replace('/^\/?' . $domainUrl . '\//', '', $url);
162
+        return preg_replace('/^\/?'.$domainUrl.'\//', '', $url);
164 163
     }
165 164
 
166 165
     /**
Please login to merge, or discard this patch.