vendor/ibexa/page-builder/src/lib/Event/Subscriber/SetPreAuthCookieSubscriber.php line 68

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\PageBuilder\Event\Subscriber;
  8. use Ibexa\Core\MVC\Symfony\Security\UserInterface;
  9. use Ibexa\PageBuilder\Security\EditorialMode\TokenManager;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\Cookie;
  12. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  13. use Symfony\Component\HttpKernel\KernelEvents;
  14. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  15. /**
  16.  * @internal
  17.  */
  18. class SetPreAuthCookieSubscriber implements EventSubscriberInterface
  19. {
  20.     /** @var \Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface */
  21.     private $tokenStorage;
  22.     /** @var \Ibexa\PageBuilder\Security\EditorialMode\TokenManager */
  23.     private $tokenManager;
  24.     /** @var string */
  25.     private $tokenCookieName;
  26.     /** @var int */
  27.     private $ttl;
  28.     /** @var array<string, string> */
  29.     private $routesMap;
  30.     /** @var bool */
  31.     private $enabled;
  32.     public function __construct(
  33.         TokenStorageInterface $tokenStorage,
  34.         TokenManager $tokenManager,
  35.         string $tokenCookieName,
  36.         int $ttl,
  37.         array $routesMap,
  38.         bool $enabled
  39.     ) {
  40.         $this->tokenStorage $tokenStorage;
  41.         $this->tokenManager $tokenManager;
  42.         $this->tokenCookieName $tokenCookieName;
  43.         $this->ttl $ttl;
  44.         $this->routesMap $routesMap;
  45.         $this->enabled $enabled;
  46.     }
  47.     /**
  48.      * @return array<string, string>
  49.      */
  50.     public static function getSubscribedEvents(): array
  51.     {
  52.         return [
  53.             KernelEvents::RESPONSE => 'onResponse',
  54.         ];
  55.     }
  56.     public function onResponse(ResponseEvent $event): void
  57.     {
  58.         if (!$this->enabled) {
  59.             return;
  60.         }
  61.         $request $event->getRequest();
  62.         $response $event->getResponse();
  63.         $route $request->attributes->get('_route');
  64.         if (!in_array($route$this->routesMaptrue)) {
  65.             return;
  66.         }
  67.         $token $this->tokenStorage->getToken();
  68.         if ($token === null || !$token->getUser() instanceof UserInterface) {
  69.             return;
  70.         }
  71.         $jwtToken $this->tokenManager->create($token->getUser());
  72.         $expire = new \DateTime();
  73.         $expire->modify(sprintf('+%d seconds'$this->ttl));
  74.         $response->headers->setCookie(
  75.             new Cookie(
  76.                 $this->tokenCookieName,
  77.                 $jwtToken,
  78.                 $expire,
  79.                 '/',
  80.                 null,
  81.                 true,
  82.                 true,
  83.                 false,
  84.                 'None'
  85.             )
  86.         );
  87.     }
  88. }
  89. class_alias(SetPreAuthCookieSubscriber::class, 'EzSystems\EzPlatformPageBuilder\Event\Subscriber\SetPreAuthCookieSubscriber');