src/User/EventSubscriber/AuthEventsSubscriber.php line 64

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Redatum\User\EventSubscriber;
  4. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationFailureEvent;
  5. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  6. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTExpiredEvent;
  7. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTInvalidEvent;
  8. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTNotFoundEvent;
  9. use Lexik\Bundle\JWTAuthenticationBundle\Events;
  10. use Redatum\User\ApiResources\Mapper\UserInfoResourceMapper;
  11. use Redatum\User\Entity\User;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  14. use VisualCraft\RestBaseBundle\Problem\ProblemResponseFactory;
  15. class AuthEventsSubscriber implements EventSubscriberInterface
  16. {
  17.     private ProblemResponseFactory $problemResponseFactory;
  18.     private NormalizerInterface $normalizer;
  19.     private UserInfoResourceMapper $userShortInfoResourceFactory;
  20.     public function __construct(
  21.         ProblemResponseFactory $problemResponseFactory,
  22.         NormalizerInterface $normalizer,
  23.         UserInfoResourceMapper $userShortInfoResourceFactory
  24.     ) {
  25.         $this->problemResponseFactory $problemResponseFactory;
  26.         $this->normalizer $normalizer;
  27.         $this->userShortInfoResourceFactory $userShortInfoResourceFactory;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             Events::AUTHENTICATION_FAILURE => [
  33.                 ['processAuthenticationFailure'],
  34.             ],
  35.             Events::AUTHENTICATION_SUCCESS => [
  36.                 ['processAuthenticationSuccess'],
  37.             ],
  38.             Events::JWT_INVALID => [
  39.                 ['processJwtInvalid'],
  40.             ],
  41.             Events::JWT_NOT_FOUND => [
  42.                 ['processJwtNotFound'],
  43.             ],
  44.             Events::JWT_EXPIRED => [
  45.                 ['processJwtExpired'],
  46.             ],
  47.         ];
  48.     }
  49.     public function processAuthenticationFailure(AuthenticationFailureEvent $event): void
  50.     {
  51.         $exception $event->getException();
  52.         $event->setResponse($this->problemResponseFactory->create($exception));
  53.     }
  54.     public function processAuthenticationSuccess(AuthenticationSuccessEvent $event): void
  55.     {
  56.         $user $event->getUser();
  57.         if (!$user instanceof User) {
  58.             return;
  59.         }
  60.         $data $event->getData();
  61.         $userResource $this->userShortInfoResourceFactory->create($user);
  62.         $data['data'] = $this->normalizer->normalize($userResource'json');
  63.         $event->setData($data);
  64.     }
  65.     public function processJwtInvalid(JWTInvalidEvent $event): void
  66.     {
  67.         $exception $event->getException();
  68.         $event->setResponse($this->problemResponseFactory->create($exception));
  69.     }
  70.     public function processJwtNotFound(JWTNotFoundEvent $event): void
  71.     {
  72.         $exception $event->getException();
  73.         $event->setResponse($this->problemResponseFactory->create($exception));
  74.     }
  75.     public function processJwtExpired(JWTExpiredEvent $event): void
  76.     {
  77.         $exception $event->getException();
  78.         $event->setResponse($this->problemResponseFactory->create($exception));
  79.     }
  80. }