- <?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\Bundle\SecurityBundle\EventListener;
- use Symfony\Bundle\SecurityBundle\Security\FirewallMap;
- use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
- use Symfony\Component\HttpKernel\Event\RequestEvent;
- use Symfony\Component\HttpKernel\KernelEvents;
- use Symfony\Component\Security\Http\Firewall;
- use Symfony\Component\Security\Http\FirewallMapInterface;
- use Symfony\Component\Security\Http\Logout\LogoutUrlGenerator;
- use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
- /**
-  * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
-  */
- class FirewallListener extends Firewall
- {
-     private $map;
-     private $logoutUrlGenerator;
-     public function __construct(FirewallMapInterface $map, EventDispatcherInterface $dispatcher, LogoutUrlGenerator $logoutUrlGenerator)
-     {
-         $this->map = $map;
-         $this->logoutUrlGenerator = $logoutUrlGenerator;
-         parent::__construct($map, $dispatcher);
-     }
-     public function configureLogoutUrlGenerator(RequestEvent $event)
-     {
-         if (!$event->isMainRequest()) {
-             return;
-         }
-         if ($this->map instanceof FirewallMap && $config = $this->map->getFirewallConfig($event->getRequest())) {
-             $this->logoutUrlGenerator->setCurrentFirewall($config->getName(), $config->getContext());
-         }
-     }
-     public function onKernelFinishRequest(FinishRequestEvent $event)
-     {
-         if ($event->isMainRequest()) {
-             $this->logoutUrlGenerator->setCurrentFirewall(null);
-         }
-         parent::onKernelFinishRequest($event);
-     }
-     /**
-      * {@inheritdoc}
-      */
-     public static function getSubscribedEvents()
-     {
-         return [
-             KernelEvents::REQUEST => [
-                 ['configureLogoutUrlGenerator', 8],
-                 ['onKernelRequest', 8],
-             ],
-             KernelEvents::FINISH_REQUEST => 'onKernelFinishRequest',
-         ];
-     }
- }
-