vendor/gesdinet/jwt-refresh-token-bundle/EventListener/AttachRefreshTokenOnSuccessListener.php line 72

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the GesdinetJWTRefreshTokenBundle package.
  4.  *
  5.  * (c) Gesdinet <http://www.gesdinet.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Gesdinet\JWTRefreshTokenBundle\EventListener;
  11. use Gesdinet\JWTRefreshTokenBundle\Model\RefreshTokenManagerInterface;
  12. use Gesdinet\JWTRefreshTokenBundle\Request\RequestRefreshToken;
  13. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  14. use Symfony\Component\Security\Core\User\UserInterface;
  15. use Symfony\Component\Validator\Validator\ValidatorInterface;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\PropertyAccess\PropertyAccessor;
  18. class AttachRefreshTokenOnSuccessListener
  19. {
  20.     /**
  21.      * @var RefreshTokenManagerInterface
  22.      */
  23.     protected $refreshTokenManager;
  24.     /**
  25.      * @var int
  26.      */
  27.     protected $ttl;
  28.     /**
  29.      * @var ValidatorInterface
  30.      */
  31.     protected $validator;
  32.     /**
  33.      * @var RequestStack
  34.      */
  35.     protected $requestStack;
  36.     /**
  37.      * @var string
  38.      */
  39.     protected $userIdentityField;
  40.     /**
  41.      * AttachRefreshTokenOnSuccessListener constructor.
  42.      *
  43.      * @param RefreshTokenManagerInterface $refreshTokenManager
  44.      * @param int                          $ttl
  45.      * @param ValidatorInterface           $validator
  46.      * @param RequestStack                 $requestStack
  47.      * @param string                       $userIdentityField
  48.      */
  49.     public function __construct(
  50.         RefreshTokenManagerInterface $refreshTokenManager,
  51.         $ttl,
  52.         ValidatorInterface $validator,
  53.         RequestStack $requestStack,
  54.         $userIdentityField
  55.     ) {
  56.         $this->refreshTokenManager $refreshTokenManager;
  57.         $this->ttl $ttl;
  58.         $this->validator $validator;
  59.         $this->requestStack $requestStack;
  60.         $this->userIdentityField $userIdentityField;
  61.     }
  62.     public function attachRefreshToken(AuthenticationSuccessEvent $event)
  63.     {
  64.         $data $event->getData();
  65.         $user $event->getUser();
  66.         $request $this->requestStack->getCurrentRequest();
  67.         if (!$user instanceof UserInterface) {
  68.             return;
  69.         }
  70.         $refreshTokenString RequestRefreshToken::getRefreshToken($request);
  71.         if ($refreshTokenString) {
  72.             $data['refresh_token'] = $refreshTokenString;
  73.         } else {
  74.             $datetime = new \DateTime();
  75.             $datetime->modify('+'.$this->ttl.' seconds');
  76.             $refreshToken $this->refreshTokenManager->create();
  77.             $accessor = new PropertyAccessor();
  78.             $userIdentityFieldValue $accessor->getValue($user$this->userIdentityField);
  79.             $refreshToken->setUsername($userIdentityFieldValue);
  80.             $refreshToken->setRefreshToken();
  81.             $refreshToken->setValid($datetime);
  82.             $valid false;
  83.             while (false === $valid) {
  84.                 $valid true;
  85.                 $errors $this->validator->validate($refreshToken);
  86.                 if ($errors->count() > 0) {
  87.                     foreach ($errors as $error) {
  88.                         if ('refreshToken' === $error->getPropertyPath()) {
  89.                             $valid false;
  90.                             $refreshToken->setRefreshToken();
  91.                         }
  92.                     }
  93.                 }
  94.             }
  95.             $this->refreshTokenManager->save($refreshToken);
  96.             $data['refresh_token'] = $refreshToken->getRefreshToken();
  97.         }
  98.         $event->setData($data);
  99.     }
  100. }