app/GraphQL/Security/Authenticator/DevAuthenticator.php line 16

Open in your IDE?
  1. <?php
  2. namespace Sq\GraphQL\Security\Authenticator;
  3. use Psr\Log\LoggerInterface;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  9. use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
  10. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  11. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  12. use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;
  13. class DevAuthenticator extends AbstractAuthenticator
  14. {
  15.     use ImpersonationTrait;
  16.     protected const AUTH_HEADER 'Authorization';
  17.     protected const IMPERSONATE_HEADER 'Impersonate-Uid';
  18.     protected const BEARER_REGEX '/^(?:\s+)?SqDev\s/';
  19.     public function __construct(
  20.         protected RequestStack $requestStack,
  21.         protected LoggerInterface $logger,
  22.     ) {
  23.     }
  24.     public function createToken(Passport $passportstring $firewallName): TokenInterface
  25.     {
  26.         $token parent::createToken($passport$firewallName);
  27.         $impersonateUid $this->requestStack->getMainRequest()->headers->get(static::IMPERSONATE_HEADER);
  28.         if ($impersonateUid)
  29.         {
  30.             $token $this->createImpersonationToken($token, (int) $impersonateUid$firewallName);
  31.         }
  32.         return $token;
  33.     }
  34.     public function supports(Request $request): bool
  35.     {
  36.         return $request->headers->has(static::AUTH_HEADER)
  37.             && preg_match(static::BEARER_REGEX$request->headers->get(static::AUTH_HEADER));
  38.     }
  39.     public function authenticate(Request $request): Passport
  40.     {
  41.         $header $request->headers->get(static::AUTH_HEADER);
  42.         $userId trim(preg_replace(static::BEARER_REGEX''$header));
  43.         return new SelfValidatingPassport(new UserBadge($userId));
  44.     }
  45.     public function onAuthenticationFailure(Request $requestAuthenticationException $exception): ?Response
  46.     {
  47.         $this->logger && $this->logger->debug('Authentication failure', [
  48.             'exception' => $exception,
  49.             'guard' => __CLASS__,
  50.         ]);
  51.         return null;
  52.     }
  53.     public function onAuthenticationSuccess(Request $requestTokenInterface $token$providerKey): ?Response
  54.     {
  55.         return null;
  56.     }
  57. }