Spaces:
No application file
No application file
File size: 3,347 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
<?php
namespace Mautic\ApiBundle\Controller\oAuth2;
use FOS\OAuthServerBundle\Event\PreAuthorizationEvent;
use FOS\OAuthServerBundle\Form\Handler\AuthorizeFormHandler;
use FOS\OAuthServerBundle\Model\ClientManagerInterface;
use OAuth2\OAuth2;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\User\UserInterface;
use Twig\Environment;
class AuthorizeController extends \FOS\OAuthServerBundle\Controller\AuthorizeController
{
/**
* This constructor must be duplicated from the extended class so our custom code could access the properties.
*/
public function __construct(
RequestStack $requestStack,
private Form $authorizeForm,
private AuthorizeFormHandler $authorizeFormHandler,
private OAuth2 $oAuth2Server,
private TokenStorageInterface $tokenStorage,
UrlGeneratorInterface $router,
ClientManagerInterface $clientManager,
private EventDispatcherInterface $eventDispatcher,
private Environment $twig,
SessionInterface $session = null
) {
parent::__construct(
$requestStack,
$authorizeForm,
$authorizeFormHandler,
$oAuth2Server,
$tokenStorage,
$router,
$clientManager,
$eventDispatcher,
$twig,
$session
);
}
/**
* @return \FOS\OAuthServerBundle\Controller\Response|Response
*
* @throws \OAuth2\OAuth2RedirectException
* @throws AccessDeniedException
*/
public function authorizeAction(Request $request)
{
$user = $this->tokenStorage->getToken()->getUser();
if (!$user instanceof UserInterface) {
throw new AccessDeniedException('This user does not have access to this section.');
}
if (true === $request->getSession()->get('_fos_oauth_server.ensure_logout')) {
$request->getSession()->invalidate(600);
$request->getSession()->set('_fos_oauth_server.ensure_logout', true);
}
$event = $this->eventDispatcher->dispatch(
new PreAuthorizationEvent($user, $this->getClient())
);
if ($event->isAuthorizedClient()) {
$scope = $request->get('scope', null);
return $this->oAuth2Server->finishClientAuthorization(true, $user, $request, $scope);
}
if (true === $this->authorizeFormHandler->process()) {
return $this->processSuccess($user, $this->authorizeFormHandler, $request);
}
$contents = $this->twig->render(
'@MauticApi/Authorize/oAuth2/authorize.html.twig',
[
'form' => $this->authorizeForm->createView(),
'client' => $this->getClient(),
]
);
return new Response($contents);
}
}
|