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

  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  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\Authenticator\Debug\TraceableAuthenticatorManagerListener;
  16. use Symfony\Component\Security\Http\Firewall\FirewallListenerInterface;
  17. /**
  18.  * Firewall collecting called security listeners and authenticators.
  19.  *
  20.  * @author Robin Chalas <robin.chalas@gmail.com>
  21.  */
  22. final class TraceableFirewallListener extends FirewallListener
  23. {
  24.     private array $wrappedListeners = [];
  25.     private array $authenticatorsInfo = [];
  26.     public function getWrappedListeners()
  27.     {
  28.         return $this->wrappedListeners;
  29.     }
  30.     public function getAuthenticatorsInfo(): array
  31.     {
  32.         return $this->authenticatorsInfo;
  33.     }
  34.     protected function callListeners(RequestEvent $eventiterable $listeners)
  35.     {
  36.         $wrappedListeners = [];
  37.         $wrappedLazyListeners = [];
  38.         $authenticatorManagerListener null;
  39.         foreach ($listeners as $listener) {
  40.             if ($listener instanceof LazyFirewallContext) {
  41.                 \Closure::bind(function () use (&$wrappedLazyListeners, &$wrappedListeners, &$authenticatorManagerListener) {
  42.                     $listeners = [];
  43.                     foreach ($this->listeners as $listener) {
  44.                         if (!$authenticatorManagerListener && $listener instanceof TraceableAuthenticatorManagerListener) {
  45.                             $authenticatorManagerListener $listener;
  46.                         }
  47.                         if ($listener instanceof FirewallListenerInterface) {
  48.                             $listener = new WrappedLazyListener($listener);
  49.                             $listeners[] = $listener;
  50.                             $wrappedLazyListeners[] = $listener;
  51.                         } else {
  52.                             $listeners[] = function (RequestEvent $event) use ($listener, &$wrappedListeners) {
  53.                                 $wrappedListener = new WrappedListener($listener);
  54.                                 $wrappedListener($event);
  55.                                 $wrappedListeners[] = $wrappedListener->getInfo();
  56.                             };
  57.                         }
  58.                     }
  59.                     $this->listeners $listeners;
  60.                 }, $listenerFirewallContext::class)();
  61.                 $listener($event);
  62.             } else {
  63.                 $wrappedListener $listener instanceof FirewallListenerInterface ? new WrappedLazyListener($listener) : new WrappedListener($listener);
  64.                 $wrappedListener($event);
  65.                 $wrappedListeners[] = $wrappedListener->getInfo();
  66.                 if (!$authenticatorManagerListener && $listener instanceof TraceableAuthenticatorManagerListener) {
  67.                     $authenticatorManagerListener $listener;
  68.                 }
  69.             }
  70.             if ($event->hasResponse()) {
  71.                 break;
  72.             }
  73.         }
  74.         if ($wrappedLazyListeners) {
  75.             foreach ($wrappedLazyListeners as $lazyListener) {
  76.                 $this->wrappedListeners[] = $lazyListener->getInfo();
  77.             }
  78.         }
  79.         $this->wrappedListeners array_merge($this->wrappedListeners$wrappedListeners);
  80.         if ($authenticatorManagerListener) {
  81.             $this->authenticatorsInfo $authenticatorManagerListener->getAuthenticatorsInfo();
  82.         }
  83.     }
  84. }