Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
78 lines
2.4 KiB
PHP
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);
|
|
}
|
|
}
|