src/Subscriber/Messenger/ChatAppSettingsCookieSubscriber.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Messenger;
  3. use App\Dictionary\SessionVars;
  4. use App\Security\ApiUser;
  5. use App\Service\Client\User\MemberPropertyService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Cookie;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  12. class ChatAppSettingsCookieSubscriber implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var TokenStorageInterface
  16.      */
  17.     protected TokenStorageInterface $tokenStorage;
  18.     /**
  19.      * @var MemberPropertyService
  20.      */
  21.     protected MemberPropertyService $propertyService;
  22.     /**
  23.      * @param TokenStorageInterface $tokenStorage
  24.      * @param MemberPropertyService $propertyService
  25.      */
  26.     public function __construct(TokenStorageInterface $tokenStorageMemberPropertyService $propertyService)
  27.     {
  28.         $this->tokenStorage $tokenStorage;
  29.         $this->propertyService $propertyService;
  30.     }
  31.     /**
  32.      * @return \array[]
  33.      */
  34.     public static function getSubscribedEvents()
  35.     {
  36.         return [
  37.             KernelEvents::RESPONSE => [
  38.                 ['setChatSettingsCookie'0],
  39.             ],
  40.         ];
  41.     }
  42.     public function setChatSettingsCookie(ResponseEvent $event)
  43.     {
  44.         /** @var ApiUser $user */
  45.         $token $this->tokenStorage->getToken();
  46.         if (null === $token || $event->isMainRequest() === false) {
  47.             return;
  48.         }
  49.         $user $token->getUser();
  50.         if (!$user instanceof ApiUser) {
  51.             if ($event->getRequest()->cookies->has(SessionVars::COOKIE_USERTOKEN)) {
  52.                 $event->getResponse()->headers->clearCookie(SessionVars::COOKIE_USERTOKEN);
  53.             }
  54.             if ($event->getRequest()->cookies->has(SessionVars::COOKIE_CHAT_APP_CONFIG)) {
  55.                 $event->getResponse()->headers->clearCookie(SessionVars::COOKIE_CHAT_APP_CONFIG);
  56.             }
  57.             return;
  58.         }
  59.         $cookie $this->getChatAppConfigCookie($event->getRequest());
  60.         $event->getResponse()->headers->setCookie($cookie);
  61.     }
  62.     /**
  63.      * @param Request $request
  64.      * @return Cookie
  65.      * @throws \Psr\Cache\InvalidArgumentException
  66.      */
  67.     protected function getChatAppConfigCookie(Request $request): Cookie
  68.     {
  69.         $name SessionVars::COOKIE_CHAT_APP_CONFIG;
  70.         /**
  71.          * @var $user ApiUser
  72.          */
  73.         $user $this->tokenStorage->getToken()->getUser();
  74.         $dataToEncode array_merge(
  75.             $this->propertyService->getMessengerProperties($user->getMemberId()),
  76.             [
  77.                 'myself' => [
  78.                     'id'            => $user->getMemberId(),
  79.                     'username'      => $user->getUsername(),
  80.                     'sex'           => $user->getSex(),
  81.                     'isAmateur'     => $user->hasRole('ROLE_AMATEUR'),
  82.                     'isOperator'    => $user->hasRole('ROLE_OPERATOR'),
  83.                     'isAdmin'       => $user->hasRole('ROLE_ADMIN'),
  84.                 ]
  85.             ]
  86.         );
  87.         if($user->hasRole('ROLE_AMATEUR')) {
  88.             $dataToEncode['amateur'] = $this->propertyService->getAmateurProperties($user->getMemberId());
  89.         }
  90.         $cookieData json_encode($dataToEncode);
  91.         return new Cookie($name$cookieData, (time()+31536000), '/'null,
  92.             $request->isSecure(), false);
  93.     }
  94. }