src/EventListener/JWTCreatedListener.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Gos\PortalSettings;
  4. use App\Utils\UserFlagService;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class JWTCreatedListener
  10. {
  11.     private $request;
  12.     private $em;
  13.     private $userFlagService;
  14.     public function __construct(
  15.         EntityManagerInterface $em,
  16.         RequestStack           $requestStack,
  17.         UserFlagService        $userFlagService
  18.     ) {
  19.         $this->em              $em;
  20.         $this->request         $requestStack->getCurrentRequest();
  21.         $this->userFlagService $userFlagService;
  22.     }
  23.     public function onJWTCreated(JWTCreatedEvent $event): void
  24.     {
  25.         $payload $event->getData();
  26.         $user    $event->getUser();
  27.         if (!empty($payload['roles']))
  28.         {
  29.             $payload['roles'] = $this->simplifyRolesArray($payload['roles']);
  30.         }
  31.         $payload['user'] = [
  32.             'firstName'   => $user->getFirstName(),
  33.             'lastName'    => $user->getLastName(),
  34.             'phoneNumber' => $user->getPhoneNumber(),
  35.         ];
  36.         $payload['is_employee']   = $user->getEmployeeAccount();
  37.         $payload['fbLoginId']     = $user->getFacebookId();
  38.         $payload['flags']         = $this->userFlagService->getUserFlags($user);
  39.         $payload['using_portals'] = $user->getUsingPortals()->map(static function (PortalSettings $portal) {
  40.             return $portal->getTitle();
  41.         })->toArray();
  42.         $event->setData($payload);
  43.         $this->markUserUsingPortal($user);
  44.     }
  45.     private function simplifyRolesArray(array $roles): array
  46.     {
  47.         $simplifiedRolesArray = [];
  48.         $simplifiedRolesArray[] = 'ROLE_USER';
  49.         if (in_array('ROLE_SUPER_ADMIN'$rolestrue))
  50.         {
  51.             $simplifiedRolesArray[] = 'ROLE_SUPER_ADMIN';
  52.         }
  53.         if (in_array('ROLE_ADMIN'$rolestrue))
  54.         {
  55.             $simplifiedRolesArray[] = 'ROLE_ADMIN';
  56.         }
  57.         return $simplifiedRolesArray;
  58.     }
  59.     private function markUserUsingPortal(UserInterface $user)
  60.     {
  61.         $hash $this->request->request->get('hash');
  62.         if ($hash !== null) {
  63.             $portalSettings $this->em->getRepository(PortalSettings::class)->findOneBy(['hash' => $hash]);
  64.             if ($portalSettings !== null) {
  65.                 $user->addUsingPortal($portalSettings);
  66.                 $this->em->persist($user);
  67.                 $this->em->flush();
  68.             }
  69.         }
  70.     }
  71. }