vendor/contao/core-bundle/src/EventListener/SwitchUserListener.php line 47

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of Contao.
  5.  *
  6.  * (c) Leo Feyer
  7.  *
  8.  * @license LGPL-3.0-or-later
  9.  */
  10. namespace Contao\CoreBundle\EventListener;
  11. use Contao\CoreBundle\Monolog\ContaoContext;
  12. use Psr\Log\LoggerInterface;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. use Symfony\Component\Security\Core\User\UserInterface;
  15. use Symfony\Component\Security\Http\Event\SwitchUserEvent;
  16. /**
  17.  * @internal
  18.  */
  19. class SwitchUserListener
  20. {
  21.     /**
  22.      * @var TokenStorageInterface
  23.      */
  24.     private $tokenStorage;
  25.     /**
  26.      * @var LoggerInterface
  27.      */
  28.     private $logger;
  29.     public function __construct(TokenStorageInterface $tokenStorageLoggerInterface $logger)
  30.     {
  31.         $this->tokenStorage $tokenStorage;
  32.         $this->logger $logger;
  33.     }
  34.     /**
  35.      * Logs successful user impersonations.
  36.      *
  37.      * @throws \RuntimeException
  38.      */
  39.     public function __invoke(SwitchUserEvent $event): void
  40.     {
  41.         $token $this->tokenStorage->getToken();
  42.         if (null === $token) {
  43.             throw new \RuntimeException('The token storage did not contain a token.');
  44.         }
  45.         $sourceUser $token->getUsername();
  46.         $targetUser $event->getTargetUser();
  47.         if ($targetUser instanceof UserInterface) {
  48.             $targetUser $targetUser->getUsername();
  49.         }
  50.         $this->logger->info(
  51.             sprintf('User "%s" has switched to user "%s"'$sourceUser$targetUser),
  52.             ['contao' => new ContaoContext(__METHOD__ContaoContext::ACCESS$sourceUser)]
  53.         );
  54.     }
  55. }