src/EventSubscriber/AuthorizationCodeSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use League\Bundle\OAuth2ServerBundle\Event\AuthorizationRequestResolveEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use Symfony\Component\Security\Core\Security;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. use Symfony\Component\Security\Http\FirewallMapInterface;
  11. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  12. class AuthorizationCodeSubscriber implements EventSubscriberInterface
  13. {
  14.     use TargetPathTrait;
  15.     private Security $security;
  16.     private UrlGeneratorInterface $urlGenerator;
  17.     private RequestStack $requestStack;
  18.     private $firewallMap;
  19.     public function __construct(Security $securityUrlGeneratorInterface $urlGeneratorRequestStack $requestStackFirewallMapInterface $firewallMap)
  20.     {
  21.         $this->security $security;
  22.         $this->urlGenerator $urlGenerator;
  23.         $this->requestStack $requestStack;
  24.         $this->firewallMap $firewallMap;
  25.     }
  26.     public function onLeagueOauth2ServerEventAuthorizationRequestResolve(AuthorizationRequestResolveEvent $event): void
  27.     {
  28.         $request $this->requestStack->getCurrentRequest();
  29.         $firewallConfig $this->firewallMap->getFirewallConfig($request);
  30.         if (null === $firewallConfig) {
  31.             return;
  32.         }
  33.         $firewallName $firewallConfig->getName();
  34.         $user $this->security->getUser();
  35.         $this->saveTargetPath($request->getSession(), $firewallName$request->getUri());
  36.         $response = new RedirectResponse($this->urlGenerator->generate('app_login'), 307);
  37.         if ($user instanceof UserInterface) {
  38.             if ($request->getSession()->get('consent_granted') !== null) {
  39.                 $event->resolveAuthorization($request->getSession()->get('consent_granted'));
  40.                 $request->getSession()->remove('consent_granted');
  41.                 return;
  42.             }
  43.             $response = new RedirectResponse($this->urlGenerator->generate('app_consent'$request->query->all()), 307);
  44.         }
  45.         $event->setResponse($response);
  46.     }
  47.     public static function getSubscribedEvents(): array
  48.     {
  49.         return [
  50.             'league.oauth2_server.event.authorization_request_resolve' => 'onLeagueOauth2ServerEventAuthorizationRequestResolve',
  51.         ];
  52.     }
  53. }