vendor/league/oauth2-server-bundle/src/Repository/AccessTokenRepository.php line 91

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace League\Bundle\OAuth2ServerBundle\Repository;
  4. use League\Bundle\OAuth2ServerBundle\Converter\ScopeConverterInterface;
  5. use League\Bundle\OAuth2ServerBundle\Entity\AccessToken as AccessTokenEntity;
  6. use League\Bundle\OAuth2ServerBundle\Manager\AccessTokenManagerInterface;
  7. use League\Bundle\OAuth2ServerBundle\Manager\ClientManagerInterface;
  8. use League\Bundle\OAuth2ServerBundle\Model\AbstractClient;
  9. use League\Bundle\OAuth2ServerBundle\Model\AccessToken as AccessTokenModel;
  10. use League\OAuth2\Server\Entities\AccessTokenEntityInterface;
  11. use League\OAuth2\Server\Entities\ClientEntityInterface;
  12. use League\OAuth2\Server\Exception\UniqueTokenIdentifierConstraintViolationException;
  13. use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface;
  14. final class AccessTokenRepository implements AccessTokenRepositoryInterface
  15. {
  16.     /**
  17.      * @var AccessTokenManagerInterface
  18.      */
  19.     private $accessTokenManager;
  20.     /**
  21.      * @var ClientManagerInterface
  22.      */
  23.     private $clientManager;
  24.     /**
  25.      * @var ScopeConverterInterface
  26.      */
  27.     private $scopeConverter;
  28.     public function __construct(
  29.         AccessTokenManagerInterface $accessTokenManager,
  30.         ClientManagerInterface $clientManager,
  31.         ScopeConverterInterface $scopeConverter
  32.     ) {
  33.         $this->accessTokenManager $accessTokenManager;
  34.         $this->clientManager $clientManager;
  35.         $this->scopeConverter $scopeConverter;
  36.     }
  37.     public function getNewToken(ClientEntityInterface $clientEntity, array $scopes$userIdentifier null)
  38.     {
  39.         /** @var int|string|null $userIdentifier */
  40.         $accessToken = new AccessTokenEntity();
  41.         $accessToken->setClient($clientEntity);
  42.         $accessToken->setUserIdentifier($userIdentifier);
  43.         foreach ($scopes as $scope) {
  44.             $accessToken->addScope($scope);
  45.         }
  46.         return $accessToken;
  47.     }
  48.     public function persistNewAccessToken(AccessTokenEntityInterface $accessTokenEntity): void
  49.     {
  50.         $accessToken $this->accessTokenManager->find($accessTokenEntity->getIdentifier());
  51.         if (null !== $accessToken) {
  52.             throw UniqueTokenIdentifierConstraintViolationException::create();
  53.         }
  54.         $accessToken $this->buildAccessTokenModel($accessTokenEntity);
  55.         $this->accessTokenManager->save($accessToken);
  56.     }
  57.     /**
  58.      * @param string $tokenId
  59.      */
  60.     public function revokeAccessToken($tokenId): void
  61.     {
  62.         $accessToken $this->accessTokenManager->find($tokenId);
  63.         if (null === $accessToken) {
  64.             return;
  65.         }
  66.         $accessToken->revoke();
  67.         $this->accessTokenManager->save($accessToken);
  68.     }
  69.     /**
  70.      * @param string $tokenId
  71.      */
  72.     public function isAccessTokenRevoked($tokenId): bool
  73.     {
  74.         $accessToken $this->accessTokenManager->find($tokenId);
  75.         if (null === $accessToken) {
  76.             return true;
  77.         }
  78.         return $accessToken->isRevoked();
  79.     }
  80.     private function buildAccessTokenModel(AccessTokenEntityInterface $accessTokenEntity): AccessTokenModel
  81.     {
  82.         /** @var AbstractClient $client */
  83.         $client $this->clientManager->find($accessTokenEntity->getClient()->getIdentifier());
  84.         $userIdentifier $accessTokenEntity->getUserIdentifier();
  85.         if (null !== $userIdentifier) {
  86.             $userIdentifier = (string) $userIdentifier;
  87.         }
  88.         return new AccessTokenModel(
  89.             $accessTokenEntity->getIdentifier(),
  90.             $accessTokenEntity->getExpiryDateTime(),
  91.             $client,
  92.             $userIdentifier,
  93.             $this->scopeConverter->toDomainArray(array_values($accessTokenEntity->getScopes()))
  94.         );
  95.     }
  96. }