29b6f6b3a0
* 2.3: made {@inheritdoc} annotations consistent across the board fixed types in phpdocs made phpdoc types consistent with those defined in Hack Add support Thai translations made types consistent with those defined in Hack removed extra/unsupported arguments [HttpKernel] fixed an error message [TwigBundle] removed undefined argument [Translation] Make IcuDatFileLoader/IcuResFileLoader::load invalid resource compatible with HHVM. Conflicts: src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php src/Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php src/Symfony/Bundle/FrameworkBundle/Templating/Loader/FilesystemLoader.php src/Symfony/Bundle/WebProfilerBundle/EventListener/WebDebugToolbarListener.php src/Symfony/Component/Config/Definition/ReferenceDumper.php src/Symfony/Component/Console/Helper/DescriptorHelper.php src/Symfony/Component/Debug/ErrorHandler.php src/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php src/Symfony/Component/Form/Tests/Extension/Core/DataMapper/PropertyPathMapperTest.php src/Symfony/Component/HttpFoundation/Response.php src/Symfony/Component/HttpFoundation/StreamedResponse.php src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php src/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php src/Symfony/Component/HttpKernel/Kernel.php src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTest.php src/Symfony/Component/Intl/NumberFormatter/NumberFormatter.php src/Symfony/Component/Security/Core/Authorization/AccessDecisionManager.php src/Symfony/Component/Stopwatch/StopwatchPeriod.php src/Symfony/Component/Translation/TranslatorInterface.php src/Symfony/Component/Validator/ConstraintValidatorFactory.php
98 lines
2.8 KiB
PHP
98 lines
2.8 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\Security\Http;
|
|
|
|
use Symfony\Component\HttpKernel\KernelEvents;
|
|
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
|
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
|
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
|
|
|
/**
|
|
* Firewall uses a FirewallMap to register security listeners for the given
|
|
* request.
|
|
*
|
|
* It allows for different security strategies within the same application
|
|
* (a Basic authentication for the /api, and a web based authentication for
|
|
* everything else for instance).
|
|
*
|
|
* @author Fabien Potencier <fabien@symfony.com>
|
|
*/
|
|
class Firewall implements EventSubscriberInterface
|
|
{
|
|
private $map;
|
|
private $dispatcher;
|
|
private $exceptionListeners;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param FirewallMapInterface $map A FirewallMapInterface instance
|
|
* @param EventDispatcherInterface $dispatcher An EventDispatcherInterface instance
|
|
*/
|
|
public function __construct(FirewallMapInterface $map, EventDispatcherInterface $dispatcher)
|
|
{
|
|
$this->map = $map;
|
|
$this->dispatcher = $dispatcher;
|
|
$this->exceptionListeners = new \SplObjectStorage();
|
|
}
|
|
|
|
/**
|
|
* Handles security.
|
|
*
|
|
* @param GetResponseEvent $event An GetResponseEvent instance
|
|
*/
|
|
public function onKernelRequest(GetResponseEvent $event)
|
|
{
|
|
if (!$event->isMasterRequest()) {
|
|
return;
|
|
}
|
|
|
|
// register listeners for this firewall
|
|
list($listeners, $exceptionListener) = $this->map->getListeners($event->getRequest());
|
|
if (null !== $exceptionListener) {
|
|
$this->exceptionListeners[$event->getRequest()] = $exceptionListener;
|
|
$exceptionListener->register($this->dispatcher);
|
|
}
|
|
|
|
// initiate the listener chain
|
|
foreach ($listeners as $listener) {
|
|
$listener->handle($event);
|
|
|
|
if ($event->hasResponse()) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function onKernelFinishRequest(FinishRequestEvent $event)
|
|
{
|
|
$request = $event->getRequest();
|
|
|
|
if (isset($this->exceptionListeners[$request])) {
|
|
$this->exceptionListeners[$request]->unregister($this->dispatcher);
|
|
unset($this->exceptionListeners[$request]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static function getSubscribedEvents()
|
|
{
|
|
return array(
|
|
KernelEvents::REQUEST => array('onKernelRequest', 8),
|
|
KernelEvents::FINISH_REQUEST => 'onKernelFinishRequest',
|
|
);
|
|
}
|
|
}
|