vendor/league/oauth2-server-bundle/src/Repository/ClientRepository.php line 26

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace League\Bundle\OAuth2ServerBundle\Repository;
  4. use League\Bundle\OAuth2ServerBundle\Entity\Client as ClientEntity;
  5. use League\Bundle\OAuth2ServerBundle\Manager\ClientManagerInterface;
  6. use League\Bundle\OAuth2ServerBundle\Model\ClientInterface;
  7. use League\OAuth2\Server\Repositories\ClientRepositoryInterface;
  8. final class ClientRepository implements ClientRepositoryInterface
  9. {
  10.     /**
  11.      * @var ClientManagerInterface
  12.      */
  13.     private $clientManager;
  14.     public function __construct(ClientManagerInterface $clientManager)
  15.     {
  16.         $this->clientManager $clientManager;
  17.     }
  18.     public function getClientEntity($clientIdentifier)
  19.     {
  20.         $client $this->clientManager->find($clientIdentifier);
  21.         if (null === $client) {
  22.             return null;
  23.         }
  24.         return $this->buildClientEntity($client);
  25.     }
  26.     public function validateClient($clientIdentifier$clientSecret$grantType): bool
  27.     {
  28.         $client $this->clientManager->find($clientIdentifier);
  29.         if (null === $client) {
  30.             return false;
  31.         }
  32.         if (!$client->isActive()) {
  33.             return false;
  34.         }
  35.         if (!$this->isGrantSupported($client$grantType)) {
  36.             return false;
  37.         }
  38.         if (!$client->isConfidential() || hash_equals((string) $client->getSecret(), (string) $clientSecret)) {
  39.             return true;
  40.         }
  41.         return false;
  42.     }
  43.     private function buildClientEntity(ClientInterface $client): ClientEntity
  44.     {
  45.         $clientEntity = new ClientEntity();
  46.         $clientEntity->setName($client->getName());
  47.         $clientEntity->setIdentifier($client->getIdentifier());
  48.         $clientEntity->setRedirectUri(array_map('strval'$client->getRedirectUris()));
  49.         $clientEntity->setConfidential($client->isConfidential());
  50.         $clientEntity->setAllowPlainTextPkce($client->isPlainTextPkceAllowed());
  51.         return $clientEntity;
  52.     }
  53.     private function isGrantSupported(ClientInterface $client, ?string $grant): bool
  54.     {
  55.         if (null === $grant) {
  56.             return true;
  57.         }
  58.         $grants $client->getGrants();
  59.         if (empty($grants)) {
  60.             return true;
  61.         }
  62.         return \in_array($grant$client->getGrants());
  63.     }
  64. }