vendor/symfony/security-bundle/Debug/TraceableFirewallListener.php line 59

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <[email protected]>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Bundle\SecurityBundle\Debug;
  11. use Symfony\Bundle\SecurityBundle\EventListener\FirewallListener;
  12. use Symfony\Bundle\SecurityBundle\Security\FirewallContext;
  13. use Symfony\Bundle\SecurityBundle\Security\LazyFirewallContext;
  14. use Symfony\Component\HttpKernel\Event\RequestEvent;
  15. use Symfony\Component\Security\Http\Firewall\FirewallListenerInterface;
  16. /**
  17.  * Firewall collecting called listeners.
  18.  *
  19.  * @author Robin Chalas <[email protected]>
  20.  */
  21. final class TraceableFirewallListener extends FirewallListener
  22. {
  23.     private $wrappedListeners = [];
  24.     public function getWrappedListeners()
  25.     {
  26.         return $this->wrappedListeners;
  27.     }
  28.     protected function callListeners(RequestEvent $eventiterable $listeners)
  29.     {
  30.         $wrappedListeners = [];
  31.         $wrappedLazyListeners = [];
  32.         foreach ($listeners as $listener) {
  33.             if ($listener instanceof LazyFirewallContext) {
  34.                 \Closure::bind(function () use (&$wrappedLazyListeners, &$wrappedListeners) {
  35.                     $listeners = [];
  36.                     foreach ($this->listeners as $listener) {
  37.                         if ($listener instanceof FirewallListenerInterface) {
  38.                             $listener = new WrappedLazyListener($listener);
  39.                             $listeners[] = $listener;
  40.                             $wrappedLazyListeners[] = $listener;
  41.                         } else {
  42.                             $listeners[] = function (RequestEvent $event) use ($listener, &$wrappedListeners) {
  43.                                 $wrappedListener = new WrappedListener($listener);
  44.                                 $wrappedListener($event);
  45.                                 $wrappedListeners[] = $wrappedListener->getInfo();
  46.                             };
  47.                         }
  48.                     }
  49.                     $this->listeners $listeners;
  50.                 }, $listenerFirewallContext::class)();
  51.                 $listener($event);
  52.             } else {
  53.                 $wrappedListener $listener instanceof FirewallListenerInterface ? new WrappedLazyListener($listener) : new WrappedListener($listener);
  54.                 $wrappedListener($event);
  55.                 $wrappedListeners[] = $wrappedListener->getInfo();
  56.             }
  57.             if ($event->hasResponse()) {
  58.                 break;
  59.             }
  60.         }
  61.         if ($wrappedLazyListeners) {
  62.             foreach ($wrappedLazyListeners as $lazyListener) {
  63.                 $this->wrappedListeners[] = $lazyListener->getInfo();
  64.             }
  65.         }
  66.         $this->wrappedListeners array_merge($this->wrappedListeners$wrappedListeners);
  67.     }
  68. }