src\Security\AzureAuthenticator.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. // use App\Repository\UserRepository;
  4. // use Symfony\Component\HttpClient\HttpClient;
  5. use App\Repository\UserRepository;
  6. use Symfony\Component\HttpFoundation\Request;
  7. // use Symfony\Component\Security\Core\Security;
  8. use Symfony\Component\Routing\RouterInterface;
  9. // use League\OAuth2\Client\Provider\AzureResourceOwner;
  10. // use League\OAuth2\Client\Token\AccessToken;
  11. use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
  12. // use App\Security\Exception\NotVerifiedEmailException;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  15. // use TheNetworg\OAuth2\Client\Provider\AzureResourceOwner;
  16. use TheNetworg\OAuth2\Client\Provider\AzureResourceOwner;
  17. use Symfony\Component\Security\Core\User\UserProviderInterface;
  18. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  19. use KnpU\OAuth2ClientBundle\Security\Authenticator\SocialAuthenticator;
  20. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  21. class AzureAuthenticator extends SocialAuthenticator
  22. {
  23.     use TargetPathTrait;
  24.     private $router;
  25.     private $clientRegistry;
  26.     private $userRepository;
  27.     public function __construct(RouterInterface $routerClientRegistry $clientRegistryUserRepository $userRepository)
  28.     {
  29.         $this->router $router;
  30.         $this->clientRegistry $clientRegistry;
  31.         $this->userRepository $userRepository;
  32.     }
  33.     public function start(Request $requestAuthenticationException $authException null)
  34.     {
  35.         return new RedirectResponse($this->router->generate('app_login'));
  36.     }
  37.     // /**
  38.     //  * Si la route correspond à celle attendue, alors on déclenche cet authenticator
  39.     // **/
  40.     public function supports(Request $request)
  41.     {
  42.         return 'oauth_check' === $request->attributes->get('_route') && $request->get('service') === 'azure';
  43.     }
  44.     public function getCredentials(Request $request)
  45.     {
  46.         return $this->fetchAccessToken($this->clientRegistry->getClient('azure'));
  47.     }
  48.     /**
  49.      * Récupère l'utilisateur à partir du AccessToken
  50.      * 
  51.      * @param AccessToken $credentials
  52.      */
  53.     public function getUser($credentialsUserProviderInterface $userProvider)
  54.     {
  55.         /** @var AzureResourceOwner $azureUser */
  56.         $azureUser $this->clientRegistry->getClient('azure')->fetchUserFromToken($credentials);
  57.         return $this->userRepository->findFromAzureOauth($azureUser);
  58.     }
  59.     public function onAuthenticationFailure(Request $requestAuthenticationException $exception)
  60.     {
  61.         // RIEN ICI
  62.     }
  63.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $providerKey)
  64.     {
  65.         $targetPath $this->getTargetPath($request->getSession(), $providerKey);
  66.         return new RedirectResponse($targetPath ?: '/');
  67.     }
  68. }