src/EventSubscriber/JWTCreatedListener.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Repository\LotsRepository;
  4. use App\Repository\ProgrammeRepository;
  5. use App\Repository\UserRepository;
  6. use App\Service\ProgramService;
  7. use JetBrains\PhpStorm\NoReturn;
  8. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  9. use Symfony\Component\HttpFoundation\RequestStack;
  10. use Symfony\Component\Security\Core\Security;
  11. use Symfony\Component\Security\Core\User\UserInterface;
  12. /**
  13.  * Class JWTCreatedListener
  14.  *
  15.  * @package \App\EventSubscriber
  16.  */
  17. class JWTCreatedListener
  18. {
  19.     /**
  20.      * @var RequestStack
  21.      */
  22.     private $security;
  23.     /**
  24.      * @var ProgrammeRepository
  25.      */
  26.     private $prgRepo;
  27.     /**
  28.      * @var LotsRepository
  29.      */
  30.     private $lotRepo;
  31.     /**
  32.      * @var ProgramService
  33.      */
  34.     private $programService;
  35.     /**
  36.      * @var UserRepository
  37.      */
  38.     private UserRepository $userRepository;
  39.     /**
  40.      * JWTCreatedListener constructor.
  41.      *
  42.      * @param \Symfony\Component\Security\Core\Security $security
  43.      * @param \App\Repository\ProgrammeRepository $prgRepo
  44.      * @param UserRepository $userRepository
  45.      * @param ProgramService $programService
  46.      * @param LotsRepository $lotsRepository
  47.      */
  48.     public function __construct(Security $security,
  49.                                 ProgrammeRepository $prgRepo,
  50.                                 UserRepository $userRepository,
  51.                                 ProgramService $programService,
  52.                                 LotsRepository $lotsRepository)
  53.     {
  54.         $this->security $security;
  55.         $this->prgRepo $prgRepo;
  56.         $this->userRepository $userRepository;
  57.         $this->programService $programService;
  58.         $this->lotRepo $lotsRepository;
  59.     }
  60.     /**
  61.      * @param JWTCreatedEvent $event
  62.      * @throws \Exception
  63.      */
  64.     #[NoReturn] public
  65.     function onJWTCreated(JWTCreatedEvent $event)
  66.     {
  67.         $user $event->getUser();
  68.         if (!$user instanceof UserInterface) {
  69.             return;
  70.         }
  71.         $userEntity $this->userRepository->findOneBy(['username' => $user->getUsername()]);
  72.         $userId $userEntity->getId();
  73.         $userRoles $userEntity->getRoles();
  74.         $payload $event->getData();
  75.         $programme = [];
  76.         if (!in_array('ROLE_ADMIN'$userRoles)) {
  77.             if (in_array('ROLE_PROMOTEUR'$userRoles) || in_array('ROLE_PROMOTEUR_CONSULT'$userRoles)) {
  78.                 $programme $this->security->getUser()->getProgrammes()->last();
  79.                 if (false === $programme) {
  80.                     throw new \Exception('Compte invalide merci de contacter l\'administrateur');
  81.                 }
  82.             } elseif (in_array('ROLE_CONTACT'$userRoles)) {
  83.                 if (empty($programme)) {
  84.                     $lots $this->security->getUser()->getLots()->last();
  85.                     $programme $lots $lots->getProgramme() : null;
  86.                 }
  87.                 if (false === $programme) {
  88.                     throw new \Exception('Compte invalide merci de contacter l\'administrateur');
  89.                 }
  90.             }
  91.             if ($programme) {
  92.                 $payload['programme'] = $programme->getName();
  93.                 $payload['programmeId'] = $programme->getId();
  94.             }
  95.         }
  96.         $payload['id'] = $userId;
  97.         $event->setData($payload);
  98.     }
  99. }