Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/ncssl/source/src/Controller/OAuthController.php

<?php

namespace App\Controller;

use App\Entity\User;
use App\Service\OAuth\Provider;
use App\Traits\RouteGeneratorTrait;
use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;

class OAuthController extends AbstractController
{
    use RouteGeneratorTrait;
    private const CODE_REQUEST_PARAMETER_NAME = 'code';

    #[Route('oauth/connect', name: 'oauth_connect')]
    public function connect(ClientRegistry $clientRegistry): RedirectResponse
    {
        return $clientRegistry
            ->getClient('namecheap')
            ->redirect([
               'openid', 'profile', 'email', 'offline_access'
            ]);
    }

    #[Route('oauth/connectCheck', name: 'oauth_connect_check')]
    public function connectCheck(ClientRegistry $clientRegistry, LoggerInterface $logger): RedirectResponse
    {
        $client = $clientRegistry->getClient('nc_sso');

        try {
            $userResource = $client->fetchUser();
        } catch (IdentityProviderException $exception) {
            $logger->error('[IdentityProviderException] OAuth connect check error', ['exception' => $exception]);
        }

        return $this->redirectToRoute('home');
    }

    #[Route('oauth/logout', name: 'oauth_logout', methods: ['GET'])]
    public function logout(Security $security): RedirectResponse
    {
        $security->logout(false);

        return $this->redirectToRoute('home');
    }
    #[Route('oauth/callback', name: 'oauth_callback')]
    public function callback(Request $request, LoggerInterface $logger, #[CurrentUser] ?User $user, ClientRegistry $clientRegistry): RedirectResponse
    {
        $client = $clientRegistry->getClient('nc_sso');

        try {
            $userResource = $client->fetchUser();
        } catch (IdentityProviderException $exception) {
            $logger->error('[IdentityProviderException] OAuth callback error', ['exception' => $exception->getMessage()]);
            $this->redirectToRoute('home');
        }

        $code = $request->get(static::CODE_REQUEST_PARAMETER_NAME, null);

        if (!$code) {
            return $this->redirectToRoute('home');
        }

        $requestRoute = $request->get(Provider::SESSION_REDIRECT_PARAMETER);

        if ($requestRoute) {
            return $this->redirectToRoute($requestRoute);
        }

        return $this->redirectToRoute('home');
    }

    #[Route('oauth/reconnect', name: 'oauth_reconnect')]
    public function reconnect(Security $security): RedirectResponse
    {
        $security->logout(false);

        return $this->redirectToRoute('oauth_connect');
    }
}
Back to Directory File Manager