src/Auth/EventListener/JWTCreatedListener.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Auth\EventListener;
  3. use App\Auth\Repository\AuthUserRepositoryInterface;
  4. use App\Organization\Repository\OrganizationRepositoryInterface;
  5. use App\Worker\Repository\WorkerRepositoryInterface;
  6. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. class JWTCreatedListener
  9. {
  10.     /**
  11.      * @var RequestStack
  12.      */
  13.     protected $requestStack;
  14.     /**
  15.      * @var AuthUserRepositoryInterface
  16.      */
  17.     protected $repository;
  18.     private OrganizationRepositoryInterface $organizationRepository;
  19.     private WorkerRepositoryInterface $workerRepository;
  20.     /**
  21.      * JWTCreatedListener constructor.
  22.      * @param RequestStack $requestStack
  23.      * @param AuthUserRepositoryInterface $repository
  24.      */
  25.     public function __construct(
  26.         RequestStack $requestStack,
  27.         AuthUserRepositoryInterface $repository,
  28.         OrganizationRepositoryInterface $organizationRepository,
  29.         WorkerRepositoryInterface $workerRepository
  30.     ) {
  31.         $this->requestStack $requestStack;
  32.         $this->repository $repository;
  33.         $this->organizationRepository $organizationRepository;
  34.         $this->workerRepository $workerRepository;
  35.     }
  36.     public function onJWTCreated(JWTCreatedEvent $event)
  37.     {
  38.         $request $this->requestStack->getCurrentRequest();
  39.         $user $event->getUser();
  40.         $user $this->repository->findActiveUserByEmail($user->getUsername());
  41.         $payload $event->getData();
  42.         $payload['user_id'] = (string) $user->getId();
  43.         $payload['fullName'] = $user->getFirstName(). ' ' $user->getLastName();
  44.         $payload['firstName'] = $user->getFirstName();
  45.         $payload['lastName'] = $user->getLastName();
  46.         $payload['organizationId'] = $user->getOrganizationId() ? $user->getOrganizationId()->toString() : null;
  47.         $payload['avatar'] = $user->getAvatar() ?
  48.             sprintf(
  49.                 'https://%s.s3.%s.amazonaws.com/avatars/%s',
  50.                 $_SERVER['AWS_S3_BUCKET'],
  51.                 $_SERVER['AWS_S3_REGION'],
  52.                 $user->getAvatar()
  53.             )
  54.             : null;
  55.         $payload['uiTour'] = $user->getUITour();
  56.         if ($this->workerRepository->isOwner($user->getId())) {
  57.             $payload['roles'][] = 'ROLE_WORKER_OWNER';
  58.         }
  59.         if ($user->isTrackingFeature()) {
  60.             $payload['options'] = [
  61.                 'trackingFeatures' => true
  62.             ];
  63.         }
  64.         try {
  65.             if (null !== $user->getOrganizationId()) {
  66.                 $organization $this->organizationRepository->findOneById($user->getOrganizationId());
  67.                 if (null !== $organization && $organization->getStripeCustomerId() && $organization->isOverduePayment()) {
  68.                     $payload['overduePayment'] = true;
  69.                 } else {
  70.                     $payload['overduePayment'] = false;
  71.                 }
  72.             } else {
  73.                 $payload['overduePayment'] = false;
  74.             }
  75.         } catch (\Exception $exception) {
  76.             $payload['overduePayment'] = false;
  77.         }
  78.         $event->setData($payload);
  79.     }
  80. }