added some validation

This commit is contained in:
Fabien Potencier 2018-04-04 08:24:09 +02:00
parent c11a8eb92e
commit 6fc1cc3ec3
2 changed files with 34 additions and 6 deletions

View File

@ -25,8 +25,20 @@ class HttpCodeActivationStrategy extends ErrorLevelActivationStrategy
private $exclusions; private $exclusions;
private $requestStack; private $requestStack;
/**
* @param array $exclusions each exclusion must have a "code" and "urls" keys
*/
public function __construct(RequestStack $requestStack, array $exclusions, $actionLevel) public function __construct(RequestStack $requestStack, array $exclusions, $actionLevel)
{ {
foreach ($exclusions as $exclusion) {
if (!array_key_exists('code', $exclusion)) {
throw new \LogicException(sprintf('An exclusion must have a "code" key'));
}
if (!array_key_exists('urls', $exclusion)) {
throw new \LogicException(sprintf('An exclusion must have a "urls" key'));
}
}
parent::__construct($actionLevel); parent::__construct($actionLevel);
$this->requestStack = $requestStack; $this->requestStack = $requestStack;
@ -49,8 +61,8 @@ class HttpCodeActivationStrategy extends ErrorLevelActivationStrategy
} }
$urlBlacklist = null; $urlBlacklist = null;
if (count($exclusion['url'])) { if (count($exclusion['urls'])) {
return !preg_match('{('.implode('|', $exclusion['url']).')}i', $request->getPathInfo()); return !preg_match('{('.implode('|', $exclusion['urls']).')}i', $request->getPathInfo());
} }
return false; return false;

View File

@ -20,6 +20,22 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
class HttpCodeActivationStrategyTest extends TestCase class HttpCodeActivationStrategyTest extends TestCase
{ {
/**
* @expectedException \LogicException
*/
public function testExclusionsWithoutCode()
{
new HttpCodeActivationStrategy(new RequestStack(), array(array('urls' => array())), Logger::WARNING);
}
/**
* @expectedException \LogicException
*/
public function testExclusionsWithoutUrls()
{
new HttpCodeActivationStrategy(new RequestStack(), array(array('code' => 404)), Logger::WARNING);
}
/** /**
* @dataProvider isActivatedProvider * @dataProvider isActivatedProvider
*/ */
@ -31,10 +47,10 @@ class HttpCodeActivationStrategyTest extends TestCase
$strategy = new HttpCodeActivationStrategy( $strategy = new HttpCodeActivationStrategy(
$requestStack, $requestStack,
array( array(
array('code' => 403, 'url' => array()), array('code' => 403, 'urls' => array()),
array('code' => 404, 'url' => array()), array('code' => 404, 'urls' => array()),
array('code' => 405, 'url' => array()), array('code' => 405, 'urls' => array()),
array('code' => 400, 'url' => array('^/400/a', '^/400/b')), array('code' => 400, 'urls' => array('^/400/a', '^/400/b')),
), ),
Logger::WARNING Logger::WARNING
); );