69 lines
2.1 KiB
PHP
69 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Entity\User;
|
|
use App\Hydra\Client;
|
|
use App\Hydra\HydraService;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Symfony\Component\Finder\Exception\AccessDeniedException;
|
|
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
|
|
|
class MainController extends AbstractController
|
|
{
|
|
public HydraService $hydra;
|
|
public Client $client;
|
|
public SessionInterface $session;
|
|
|
|
public function __construct(SessionInterface $session, HydraService $hydra, Client $client)
|
|
{
|
|
$this->session = $session;
|
|
$this->client = $client;
|
|
$this->hydra = $hydra;
|
|
}
|
|
|
|
#[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(Request $request): Response
|
|
{
|
|
return new Response('healthy', 200);
|
|
}
|
|
|
|
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])]
|
|
public function loginAccept(Request $request): RedirectResponse
|
|
{
|
|
$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']);
|
|
}
|
|
|
|
#[Route('/connect/consent', name: 'app_consent')]
|
|
public function consent(Request $request): RedirectResponse
|
|
{
|
|
return $this->hydra->handleConsentRequest($request);
|
|
}
|
|
}
|