Update based on feedback

This commit is contained in:
Damian Mooyman 2017-06-27 10:19:51 +12:00
parent d20ab50f9d
commit f699650b5f
5 changed files with 14 additions and 44 deletions

View File

@ -111,9 +111,8 @@ property. The controller which does the work should be registered under the
SilverStripe\Control\Director: SilverStripe\Control\Director:
rules: rules:
special\section: special\section:
Controller: SpecialRouteMiddleware Controller: %$SpecialRouteMiddleware
## API Documentation ## API Documentation
* [api:SilverStripe\Control\HTTPMiddleware] * [api:SilverStripe\Control\HTTPMiddleware]

View File

@ -372,7 +372,7 @@ class Director implements TemplateGlobalProvider
// Note that if a different request was previously registered, this will now be lost // Note that if a different request was previously registered, this will now be lost
// In these cases it's better to use Kernel::nest() prior to kicking off a nested request // In these cases it's better to use Kernel::nest() prior to kicking off a nested request
Injector::inst()->unregisterNamedObject(HTTPRequest::class, true); Injector::inst()->unregisterNamedObject(HTTPRequest::class);
return $response; return $response;
} }

View File

@ -82,17 +82,13 @@ class TrustedProxyMiddleware implements HTTPMiddleware
} }
/** /**
* Set the array of headers from which to lookup the hostname * Set the array of headers from which to lookup the hostname.
* Can also specify comma-separated list as a single string.
* *
* @param array|string $proxyHostHeaders * @param array $proxyHostHeaders
* @return $this * @return $this
*/ */
public function setProxyHostHeaders($proxyHostHeaders) public function setProxyHostHeaders($proxyHostHeaders)
{ {
if (is_string($proxyHostHeaders)) {
$proxyHostHeaders = preg_split('/ *, */', $proxyHostHeaders);
}
$this->proxyHostHeaders = $proxyHostHeaders ?: []; $this->proxyHostHeaders = $proxyHostHeaders ?: [];
return $this; return $this;
} }
@ -108,17 +104,13 @@ class TrustedProxyMiddleware implements HTTPMiddleware
} }
/** /**
* Set the array of headers from which to lookup the client IP * Set the array of headers from which to lookup the client IP.
* Can also specify comma-separated list as a single string.
* *
* @param array|string $proxyIPHeaders * @param array $proxyIPHeaders
* @return $this * @return $this
*/ */
public function setProxyIPHeaders($proxyIPHeaders) public function setProxyIPHeaders($proxyIPHeaders)
{ {
if (is_string($proxyIPHeaders)) {
$proxyIPHeaders = preg_split('/ *, */', $proxyIPHeaders);
}
$this->proxyIPHeaders = $proxyIPHeaders ?: []; $this->proxyIPHeaders = $proxyIPHeaders ?: [];
return $this; return $this;
} }
@ -137,14 +129,11 @@ class TrustedProxyMiddleware implements HTTPMiddleware
* Set array of headers from which to lookup the client scheme (http/https) * Set array of headers from which to lookup the client scheme (http/https)
* Can also specify comma-separated list as a single string. * Can also specify comma-separated list as a single string.
* *
* @param array|string $proxySchemeHeaders * @param array $proxySchemeHeaders
* @return $this * @return $this
*/ */
public function setProxySchemeHeaders($proxySchemeHeaders) public function setProxySchemeHeaders($proxySchemeHeaders)
{ {
if (is_string($proxySchemeHeaders)) {
$proxySchemeHeaders = preg_split('/ *, */', $proxySchemeHeaders);
}
$this->proxySchemeHeaders = $proxySchemeHeaders ?: []; $this->proxySchemeHeaders = $proxySchemeHeaders ?: [];
return $this; return $this;
} }
@ -210,7 +199,7 @@ class TrustedProxyMiddleware implements HTTPMiddleware
// Validate IP address // Validate IP address
$ip = $request->getIP(); $ip = $request->getIP();
if ($ip) { if ($ip) {
return IPUtils::checkIP($ip, preg_split('/ *, */', $trustedIPs)); return IPUtils::checkIP($ip, preg_split('/\s*,\s*/', $trustedIPs));
} }
return false; return false;

View File

@ -851,15 +851,12 @@ class Injector implements ContainerInterface
* by the inject * by the inject
* *
* @param string $name The name to unregister * @param string $name The name to unregister
* @param bool $flushSpecs Set to true to clear spec for this service
* @return $this * @return $this
*/ */
public function unregisterNamedObject($name, $flushSpecs = false) public function unregisterNamedObject($name)
{ {
unset($this->serviceCache[$name]); unset($this->serviceCache[$name]);
if ($flushSpecs) { unset($this->specs[$name]);
unset($this->specs[$name]);
}
return $this; return $this;
} }
@ -867,10 +864,9 @@ class Injector implements ContainerInterface
* Clear out objects of one or more types that are managed by the injetor. * Clear out objects of one or more types that are managed by the injetor.
* *
* @param array|string $types Base class of object (not service name) to remove * @param array|string $types Base class of object (not service name) to remove
* @param bool $flushSpecs Set to true to clear spec for this service
* @return $this * @return $this
*/ */
public function unregisterObjects($types, $flushSpecs = false) public function unregisterObjects($types)
{ {
if (!is_array($types)) { if (!is_array($types)) {
$types = [ $types ]; $types = [ $types ];
@ -884,7 +880,7 @@ class Injector implements ContainerInterface
throw new InvalidArgumentException("Global unregistration is not allowed"); throw new InvalidArgumentException("Global unregistration is not allowed");
} }
if ($object instanceof $filterClass) { if ($object instanceof $filterClass) {
$this->unregisterNamedObject($key, $flushSpecs); $this->unregisterNamedObject($key);
break; break;
} }
} }

View File

@ -811,15 +811,8 @@ class InjectorTest extends SapphireTest
$this->assertTrue($injector->has('NamedService')); $this->assertTrue($injector->has('NamedService'));
$this->assertEquals($service, $injector->get('NamedService')); $this->assertEquals($service, $injector->get('NamedService'));
// Unregister by name only: New instance of the // Unregister service by name
// old class will be constructed
$injector->unregisterNamedObject('NamedService'); $injector->unregisterNamedObject('NamedService');
$this->assertTrue($injector->has('NamedService'));
$this->assertNotEquals($service, $injector->get(TestObject::class));
// Unregister name and spec, injector forgets about this
// service spec altogether
$injector->unregisterNamedObject('NamedService', true);
$this->assertFalse($injector->has('NamedService')); $this->assertFalse($injector->has('NamedService'));
// Test registered with class name // Test registered with class name
@ -827,15 +820,8 @@ class InjectorTest extends SapphireTest
$this->assertTrue($injector->has(TestObject::class)); $this->assertTrue($injector->has(TestObject::class));
$this->assertEquals($service, $injector->get(TestObject::class)); $this->assertEquals($service, $injector->get(TestObject::class));
// Unregister by name only: New instance of the // Unregister service by class
// old class will be constructed
$injector->unregisterNamedObject(TestObject::class); $injector->unregisterNamedObject(TestObject::class);
$this->assertTrue($injector->has(TestObject::class));
$this->assertNotEquals($service, $injector->get(TestObject::class));
// Unregister name and spec, injector forgets about this
// service spec altogether
$injector->unregisterNamedObject(TestObject::class, true);
$this->assertFalse($injector->has(TestObject::class)); $this->assertFalse($injector->has(TestObject::class));
} }