src/Controller/Login/LoginOAuthController.php line 78

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Controller\Login;
  3. use Harmonizely\Core\Exception\BadRequestException;
  4. use Harmonizely\Core\Exception\ValidationException;
  5. use Harmonizely\Core\Response\Contract\IResponseBuilder;
  6. use Harmonizely\Core\Security\Contract\ISecurityHelper;
  7. use Harmonizely\Core\Validation\Contract\IDTOValidator;
  8. use Harmonizely\DTO\User\Request\ConnectOAuthRequestDTO;
  9. use Harmonizely\Service\Panel\OAuth\OAuthClientsContainer;
  10. use Harmonizely\Service\Panel\OAuth\OAuthException;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class LoginOAuthController extends AbstractController
  15. {
  16.     /**
  17.      * @var OAuthClientsContainer
  18.      */
  19.     private OAuthClientsContainer $clientContainer;
  20.     /**
  21.      * @var ISecurityHelper
  22.      */
  23.     private ISecurityHelper $securityHelper;
  24.     /**
  25.      * @var IDTOValidator
  26.      */
  27.     private IDTOValidator $validator;
  28.     /**
  29.      * @var IResponseBuilder
  30.      */
  31.     private IResponseBuilder $responseBuilder;
  32.     /**
  33.      * @param OAuthClientsContainer $container
  34.      * @param ISecurityHelper $securityHelper
  35.      * @param IDTOValidator $validator
  36.      * @param IResponseBuilder $responseBuilder
  37.      */
  38.     public function __construct(
  39.         OAuthClientsContainer $container,
  40.         ISecurityHelper $securityHelper,
  41.         IDTOValidator $validator,
  42.         IResponseBuilder $responseBuilder
  43.     )
  44.     {
  45.         $this->clientContainer $container;
  46.         $this->securityHelper $securityHelper;
  47.         $this->validator $validator;
  48.         $this->responseBuilder $responseBuilder;
  49.     }
  50.     /**
  51.      * @Route("/login/oauth/{provider}", name="login.oauth")
  52.      *
  53.      * @param string $provider
  54.      * @param ConnectOAuthRequestDTO $requestDTO
  55.      * @return Response
  56.      * @throws OAuthException
  57.      * @throws ValidationException
  58.      */
  59.     public function __invoke(string $providerConnectOAuthRequestDTO $requestDTO): Response
  60.     {
  61.         $providerObj $this->clientContainer->get($provider);
  62.         if ($this->securityHelper->getUser()) {
  63.             $this->validator->validate($requestDTO);
  64.             return $this->responseBuilder->buildResponse([
  65.                 'redirectUrl' => $providerObj->getAuthUrl(),
  66.             ]);
  67.         } else {
  68.             return $this->redirect($providerObj->getAuthUrl());
  69.         }
  70.     }
  71. }