src/EventListener/AttachRefreshTokenOnSuccessListener.php line 58

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Jenssegers\Agent\Agent;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\HttpFoundation\Cookie;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Security\Http\HttpUtils;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use App\Api\Security\Exception\UserNotMatchException;
  10. use Symfony\Component\Security\Core\User\UserInterface;
  11. use Gesdinet\JWTRefreshTokenBundle\Model\RefreshTokenInterface;
  12. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  13. use Gesdinet\JWTRefreshTokenBundle\Model\RefreshTokenManagerInterface;
  14. use Gesdinet\JWTRefreshTokenBundle\Request\Extractor\ExtractorInterface;
  15. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  16. use Gesdinet\JWTRefreshTokenBundle\Generator\RefreshTokenGeneratorInterface;
  17. use Gesdinet\JWTRefreshTokenBundle\EventListener\AttachRefreshTokenOnSuccessListener as EventListenerAttachRefreshTokenOnSuccessListener;
  18. use App\Entity\RefreshToken;
  19. class AttachRefreshTokenOnSuccessListener extends EventListenerAttachRefreshTokenOnSuccessListener
  20. {
  21.     /**
  22.      * @param int    $ttl
  23.      * @param string $tokenParameterName
  24.      * @param bool   $singleUse
  25.      */
  26.     public function __construct(
  27.         RefreshTokenManagerInterface $refreshTokenManager,
  28.         $ttl,
  29.         RequestStack $requestStack,
  30.         $tokenParameterName,
  31.         $singleUse,
  32.         RefreshTokenGeneratorInterface $refreshTokenGenerator,
  33.         ExtractorInterface $extractor,
  34.         array $cookieSettings,
  35.         private EntityManagerInterface $entityManager,
  36.     ) {
  37.         $this->refreshTokenManager $refreshTokenManager;
  38.         $this->ttl $ttl;
  39.         $this->requestStack $requestStack;
  40.         $this->tokenParameterName $tokenParameterName;
  41.         $this->singleUse $singleUse;
  42.         $this->refreshTokenGenerator $refreshTokenGenerator;
  43.         $this->extractor $extractor;
  44.         $this->cookieSettings array_merge([
  45.             'enabled' => false,
  46.             'same_site' => 'lax',
  47.             'path' => '/',
  48.             'domain' => null,
  49.             'http_only' => true,
  50.             'secure' => true,
  51.             'remove_token_from_body' => true,
  52.         ], $cookieSettings);
  53.     }
  54.     public function attachRefreshToken(AuthenticationSuccessEvent $event): void
  55.     {
  56.         parent::attachRefreshToken($event);
  57.         $user $event->getUser();
  58.         if (!$user instanceof UserInterface) {
  59.             return;
  60.         }
  61.         if ($data $event->getData()) {
  62.             $refreshTokenString $data[$this->tokenParameterName];
  63.             if ($refreshTokenRepository $this->entityManager->getRepository(RefreshToken::class)) {
  64.                 if ($refreshTokenEntity $refreshTokenRepository->findOneBy(['refresh_token' => $refreshTokenString])) {
  65.                     $refreshTokenEntity->setExternalUserId($user->getId());
  66.                     if ($uuid $user->getUuid()) {
  67.                         $refreshTokenEntity->setUuid($uuid);
  68.                     }
  69.                     $this->entityManager->persist($refreshTokenEntity);
  70.                     $this->entityManager->flush();
  71.                 }
  72.             }
  73.         }
  74.     }
  75. }