<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class TestSuiteController extends AbstractController
{
private const MAID_MATCHING_SERVER_API_URL = 'https://api.preprod.first-id.fr/mobile/server';
private HttpClientInterface $httpClient;
public function __construct(HttpClientInterface $httpClient)
{
$this->httpClient = $httpClient;
}
#[Route('/test-suite', name: 'app_test_suite', methods: ['GET'])]
public function index(Request $request): RedirectResponse | Response
{
return $this->render('test_suite/test_suite.html.twig', [
'site_name' => 'FirstID - Suite de Tests Complète'
]);
}
#[Route('/test-suite/api-proxy', name: 'app_test_suite_api_proxy', methods: ['POST'])]
public function apiProxy(Request $request): JsonResponse
{
try {
$requestPayload = json_decode($request->getContent(), true);
if (!is_array($requestPayload)) {
return $this->json(
['error' => 'Invalid JSON payload'],
Response::HTTP_BAD_REQUEST
);
}
$clientIpAddress = $this->getClientIpAddress($request);
$requestPayload['ip'] = $clientIpAddress;
$response = $this->httpClient->request('POST', self::MAID_MATCHING_SERVER_API_URL, [
'json' => $requestPayload,
'headers' => [
'Content-Type' => 'application/json',
],
]);
$statusCode = $response->getStatusCode();
$responseData = $response->toArray(false);
return $this->json($responseData, $statusCode);
} catch (\Exception $exception) {
return $this->json(
['error' => 'Proxy request failed: ' . $exception->getMessage()],
Response::HTTP_INTERNAL_SERVER_ERROR
);
}
}
private function getClientIpAddress(Request $request): string
{
$cloudflareIp = $request->headers->get('CF-Connecting-IP');
if ($cloudflareIp !== null) {
return $cloudflareIp;
}
$forwardedFor = $request->headers->get('X-Forwarded-For');
if ($forwardedFor !== null) {
$ipAddresses = explode(',', $forwardedFor);
return trim($ipAddresses[0]);
}
$clientIp = $request->getClientIp();
return $clientIp ?? '0.0.0.0';
}
}