<?php
declare(strict_types=1);
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class Gate2Controller extends AbstractController
{
#[Route('/gate2', name: 'app_gate2', methods: ['GET'])]
public function index(Request $request): Response
{
$firstIdCookie = $request->cookies->get('firstid');
return $this->render('gate/gate2.html.twig', [
'hasFirstId' => !empty($firstIdCookie),
'site_name' => 'First ID Demo'
]);
}
#[Route('/gate2/redirect', name: 'app_gate2_redirect', methods: ['GET'])]
public function initiateFirstIdRedirect(Request $request): RedirectResponse
{
$host = $request->getSchemeAndHttpHost();
$redirectHost = urlencode($host . '/first-id');
$redirectUri = urlencode($host . '/gate2');
return new RedirectResponse(
"https://gate.preprod.first-id.fr?redirectHost={$redirectHost}&redirectUri={$redirectUri}",
Response::HTTP_FOUND
);
}
#[Route('/first-id', name: 'app_first_id', methods: ['GET'])]
public function handleFirstId(Request $request): RedirectResponse
{
if ($request->query->has('firstId')) {
$firstId = (string) $request->query->get('firstId');
$target = $request->query->get('redirectUri');
$targetUrl = is_string($target) && $target !== ''
? urldecode($target)
: $this->generateUrl('app_gate2');
$response = $this->redirect($targetUrl);
$response->headers->setCookie(
new Cookie(
'firstid',
$firstId,
time() + (60 * 60 * 24 * 180),
'/',
null,
true,
false,
false,
Cookie::SAMESITE_NONE
)
);
return $response;
}
return $this->redirectToRoute('app_gate2');
}
}