vendor/contao/core-bundle/src/EventListener/PreviewAuthenticationListener.php line 55

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 Contao\CoreBundle\Security\Authentication\Token\TokenChecker;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpKernel\Event\RequestEvent;
  15. use Symfony\Component\HttpKernel\UriSigner;
  16. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  17. /**
  18.  * @internal
  19.  */
  20. class PreviewAuthenticationListener
  21. {
  22.     /**
  23.      * @var ScopeMatcher
  24.      */
  25.     private $scopeMatcher;
  26.     /**
  27.      * @var TokenChecker
  28.      */
  29.     private $tokenChecker;
  30.     /**
  31.      * @var UrlGeneratorInterface
  32.      */
  33.     private $router;
  34.     /**
  35.      * @var UriSigner
  36.      */
  37.     private $uriSigner;
  38.     public function __construct(ScopeMatcher $scopeMatcherTokenChecker $tokenCheckerUrlGeneratorInterface $routerUriSigner $uriSigner)
  39.     {
  40.         $this->scopeMatcher $scopeMatcher;
  41.         $this->tokenChecker $tokenChecker;
  42.         $this->router $router;
  43.         $this->uriSigner $uriSigner;
  44.     }
  45.     public function __invoke(RequestEvent $event): void
  46.     {
  47.         $request $event->getRequest();
  48.         if (
  49.             !$request->attributes->get('_preview'false)
  50.             || $this->scopeMatcher->isBackendRequest($request)
  51.             || $this->tokenChecker->hasBackendUser()
  52.         ) {
  53.             return;
  54.         }
  55.         $context $this->router->getContext();
  56.         $baseUrl $context->getBaseUrl();
  57.         $context->setBaseUrl('');
  58.         $url $this->router->generate(
  59.             'contao_backend_login',
  60.             ['redirect' => $request->getUri()],
  61.             UrlGeneratorInterface::ABSOLUTE_URL
  62.         );
  63.         $context->setBaseUrl($baseUrl);
  64.         $event->setResponse(new RedirectResponse($this->uriSigner->sign($url)));
  65.     }
  66. }