<?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;
use Symfony\Component\Uid\Uuid;
class Gate3Controller extends AbstractController
{
#[Route('/gate3', name: 'app_gate3', methods: ['GET'])]
public function index(Request $request): Response
{
$firstIdCookie = $request->cookies->get('firstid');
return $this->render('gate/gate3.html.twig', [
'hasFirstId' => !empty($firstIdCookie),
'site_name' => 'First ID Demo'
]);
}
#[Route('/gate3/redirect', name: 'app_gate3_redirect', methods: ['GET'])]
public function initiateFirstIdRedirect(Request $request): RedirectResponse
{
$host = $request->getSchemeAndHttpHost();
$randomUuid = Uuid::v4()->toRfc4122();
$redirectHost = urlencode($host . '/random-redirect/' . $randomUuid);
$redirectUri = urlencode($host . '/gate3');
return new RedirectResponse(
"https://gate.preprod.first-id.fr?redirectHost={$redirectHost}&redirectUri={$redirectUri}",
Response::HTTP_FOUND
);
}
#[Route('/random-redirect/{uuid}', name: 'app_random_redirect', methods: ['GET'])]
public function handleRandomRedirect(Request $request, string $uuid): RedirectResponse
{
if ($request->query->has('firstId')) {
$firstId = (string) $request->query->get('firstId');
$redirectUri = $request->query->get('redirectUri');
$redirectHost = $request->query->get('redirectHost');
$targetUrl = $this->generateUrl('app_gate3');
if (is_string($redirectUri) && $redirectUri !== '') {
$targetUrl = urldecode($redirectUri);
} elseif (is_string($redirectHost) && $redirectHost !== '') {
$targetUrl = urldecode($redirectHost);
}
$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_gate3');
}
}