Files
hydra-sql/src/Controller/MainController.php
Gauthier DUPONT 2e5e1e72ae
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
chore(symfony) #57 : bump symfony to version 6.4 and fix deprecations
2025-07-30 11:37:06 +02:00

78 lines
2.4 KiB
PHP

<?php
namespace App\Controller;
use App\Entity\User;
use App\Hydra\Client;
use App\Hydra\HydraService;
use App\SQLLogin\SQLLoginRequest;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class MainController extends AbstractController
{
public function __construct(
private readonly RequestStack $requestStack,
private readonly HydraService $hydra,
private readonly Client $client
){
}
#[Route('/', name: 'app_home')]
public function home(Request $request): RedirectResponse
{
return $this->hydra->handleLoginRequest($request);
}
/*
* Route de Healthcheck (notament pour kubernetes)
*/
#[Route('/health', name: 'health')]
public function health(): Response
{
return new Response('healthy', Response::HTTP_OK);
}
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])]
public function loginAccept(SQLLoginRequest $sqlLoginRequest): RedirectResponse
{
$user = $this->getUser();
if (!$user instanceof User) {
throw new AccessDeniedException();
}
$challenge = $this->requestStack->getSession()->get('challenge');
if (!$challenge) {
return new RedirectResponse($this->getParameter('issuer_url'));
}
$subject = $user->getLogin();
$subjectRewriteExpression = $sqlLoginRequest->getSubjectRewriteExpression();
if (null != $subjectRewriteExpression) {
$expressionLanguage = new ExpressionLanguage();
$subject = $expressionLanguage->evaluate($subjectRewriteExpression, $user->getAttributes());
}
$loginAcceptRes = $this->client->acceptLoginRequest($challenge, [
'subject' => $subject,
'remember' => true,
])->toArray();
return new RedirectResponse($loginAcceptRes['redirect_to']);
}
#[Route('/connect/consent', name: 'app_consent')]
public function consent(Request $request): RedirectResponse
{
return $this->hydra->handleConsentRequest($request);
}
}