src/Controller/TestSuiteController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Contracts\HttpClient\HttpClientInterface;
  10. class TestSuiteController extends AbstractController
  11. {
  12.     private const MAID_MATCHING_SERVER_API_URL 'https://api.preprod.first-id.fr/mobile/server';
  13.     private HttpClientInterface $httpClient;
  14.     public function __construct(HttpClientInterface $httpClient)
  15.     {
  16.         $this->httpClient $httpClient;
  17.     }
  18.     #[Route('/test-suite'name'app_test_suite'methods: ['GET'])]
  19.     public function index(Request $request): RedirectResponse Response
  20.     {
  21.         return $this->render('test_suite/test_suite.html.twig', [
  22.             'site_name' => 'FirstID - Suite de Tests Complète'
  23.         ]);
  24.     }
  25.     #[Route('/test-suite/api-proxy'name'app_test_suite_api_proxy'methods: ['POST'])]
  26.     public function apiProxy(Request $request): JsonResponse
  27.     {
  28.         try {
  29.             $requestPayload json_decode($request->getContent(), true);
  30.             if (!is_array($requestPayload)) {
  31.                 return $this->json(
  32.                     ['error' => 'Invalid JSON payload'],
  33.                     Response::HTTP_BAD_REQUEST
  34.                 );
  35.             }
  36.             $clientIpAddress $this->getClientIpAddress($request);
  37.             $requestPayload['ip'] = $clientIpAddress;
  38.             $response $this->httpClient->request('POST'self::MAID_MATCHING_SERVER_API_URL, [
  39.                 'json' => $requestPayload,
  40.                 'headers' => [
  41.                     'Content-Type' => 'application/json',
  42.                 ],
  43.             ]);
  44.             $statusCode $response->getStatusCode();
  45.             $responseData $response->toArray(false);
  46.             return $this->json($responseData$statusCode);
  47.         } catch (\Exception $exception) {
  48.             return $this->json(
  49.                 ['error' => 'Proxy request failed: ' $exception->getMessage()],
  50.                 Response::HTTP_INTERNAL_SERVER_ERROR
  51.             );
  52.         }
  53.     }
  54.     private function getClientIpAddress(Request $request): string
  55.     {
  56.         $cloudflareIp $request->headers->get('CF-Connecting-IP');
  57.         if ($cloudflareIp !== null) {
  58.             return $cloudflareIp;
  59.         }
  60.         $forwardedFor $request->headers->get('X-Forwarded-For');
  61.         if ($forwardedFor !== null) {
  62.             $ipAddresses explode(','$forwardedFor);
  63.             return trim($ipAddresses[0]);
  64.         }
  65.         $clientIp $request->getClientIp();
  66.         return $clientIp ?? '0.0.0.0';
  67.     }
  68. }