vendor/symfony/security-bundle/DependencyInjection/Compiler/RegisterTokenUsageTrackingPass.php line 47

  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\DependencyInjection\Compiler;
  11. use Monolog\Processor\ProcessorInterface;
  12. use Symfony\Component\DependencyInjection\Argument\BoundArgument;
  13. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  14. use Symfony\Component\DependencyInjection\ContainerBuilder;
  15. use Symfony\Component\DependencyInjection\Reference;
  16. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  17. /**
  18.  * Injects the session tracker enabler in "security.context_listener" + binds "security.untracked_token_storage" to ProcessorInterface instances.
  19.  *
  20.  * @author Nicolas Grekas <p@tchwork.com>
  21.  *
  22.  * @internal
  23.  */
  24. class RegisterTokenUsageTrackingPass implements CompilerPassInterface
  25. {
  26.     public function process(ContainerBuilder $container)
  27.     {
  28.         if (!$container->has('security.untracked_token_storage')) {
  29.             return;
  30.         }
  31.         $processorAutoconfiguration $container->registerForAutoconfiguration(ProcessorInterface::class);
  32.         $processorAutoconfiguration->setBindings($processorAutoconfiguration->getBindings() + [
  33.             TokenStorageInterface::class => new BoundArgument(new Reference('security.untracked_token_storage'), false),
  34.         ]);
  35.         if (!$container->has('session.factory')) {
  36.             $container->setAlias('security.token_storage''security.untracked_token_storage')->setPublic(true);
  37.             $container->getDefinition('security.untracked_token_storage')->addTag('kernel.reset', ['method' => 'reset']);
  38.         } elseif ($container->hasDefinition('security.context_listener')) {
  39.             $tokenStorageClass $container->getParameterBag()->resolveValue($container->findDefinition('security.token_storage')->getClass());
  40.             if (method_exists($tokenStorageClass'enableUsageTracking')) {
  41.                 $container->getDefinition('security.context_listener')
  42.                     ->setArgument(6, [new Reference('security.token_storage'), 'enableUsageTracking']);
  43.             }
  44.         }
  45.     }
  46. }