vendor/contao/core-bundle/src/EventListener/RefererIdListener.php line 48

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\Routing\ScopeMatcher;
  12. use Symfony\Component\HttpKernel\Event\RequestEvent;
  13. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  14. /**
  15.  * @internal
  16.  */
  17. class RefererIdListener
  18. {
  19.     /**
  20.      * @var TokenGeneratorInterface
  21.      */
  22.     private $tokenGenerator;
  23.     /**
  24.      * @var ScopeMatcher
  25.      */
  26.     private $scopeMatcher;
  27.     /**
  28.      * @var string
  29.      */
  30.     private $token;
  31.     public function __construct(TokenGeneratorInterface $tokenGeneratorScopeMatcher $scopeMatcher)
  32.     {
  33.         $this->tokenGenerator $tokenGenerator;
  34.         $this->scopeMatcher $scopeMatcher;
  35.     }
  36.     /**
  37.      * Adds the referer ID to the request.
  38.      */
  39.     public function __invoke(RequestEvent $event): void
  40.     {
  41.         if (!$this->scopeMatcher->isBackendMasterRequest($event)) {
  42.             return;
  43.         }
  44.         $request $event->getRequest();
  45.         if (null === $this->token) {
  46.             $this->token $this->tokenGenerator->generateToken();
  47.         }
  48.         $request->attributes->set('_contao_referer_id'$this->token);
  49.     }
  50. }