hydra-sql/src/Controller/MainController.php

69 lines
2.1 KiB
PHP
Raw Normal View History

2022-04-07 11:49:17 +02:00
<?php
namespace App\Controller;
2022-05-03 08:54:45 +02:00
use App\Entity\User;
use App\Hydra\Client;
use App\Hydra\HydraService;
2022-04-07 11:49:17 +02:00
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
2022-05-04 17:13:04 +02:00
use Symfony\Component\HttpFoundation\Request;
2023-12-11 14:07:40 +01:00
use Symfony\Component\HttpFoundation\Response;
2022-05-04 17:13:04 +02:00
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
2022-04-07 11:49:17 +02:00
class MainController extends AbstractController
{
public HydraService $hydra;
public Client $client;
public SessionInterface $session;
2022-04-07 11:49:17 +02:00
public function __construct(SessionInterface $session, HydraService $hydra, Client $client)
2022-05-03 08:54:45 +02:00
{
$this->session = $session;
$this->client = $client;
$this->hydra = $hydra;
2022-05-03 08:54:45 +02:00
}
#[Route('/', name: 'app_home')]
public function home(Request $request): RedirectResponse
2022-05-03 08:54:45 +02:00
{
return $this->hydra->handleLoginRequest($request);
2022-05-03 08:54:45 +02:00
}
2023-12-11 14:13:35 +01:00
/*
* Route de Healthcheck (notament pour kubernetes)
*/
2023-12-11 13:57:15 +01:00
#[Route('/health', name: 'health')]
public function health(Request $request): Response
2023-12-11 13:57:15 +01:00
{
return new Response('healthy', 200);
}
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])]
public function loginAccept(Request $request): RedirectResponse
2022-05-03 08:54:45 +02:00
{
$user = $this->getUser();
if (!$user instanceof User) {
throw new AccessDeniedException();
}
$challenge = $this->session->get('challenge');
if (!$challenge) {
return new RedirectResponse($this->getParameter('issuer_url'));
}
$loginAcceptRes = $this->client->acceptLoginRequest($challenge, [
'subject' => $user->getLogin(),
'remember' => true,
])->toArray();
return new RedirectResponse($loginAcceptRes['redirect_to']);
2022-05-03 08:54:45 +02:00
}
#[Route('/connect/consent', name: 'app_consent')]
public function consent(Request $request): RedirectResponse
2022-05-03 08:54:45 +02:00
{
return $this->hydra->handleConsentRequest($request);
2022-05-03 15:09:42 +02:00
}
2022-05-04 17:13:04 +02:00
}