src/EventSubscriber/CorsSubscriber.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. class CorsSubscriber implements EventSubscriberInterface
  7. {
  8.     public static function getSubscribedEvents(): array
  9.     {
  10.         return [
  11.             KernelEvents::RESPONSE => 'onKernelResponse',
  12.         ];
  13.     }
  14.     public function onKernelResponse(ResponseEvent $event): void
  15.     {
  16.         $request $event->getRequest();
  17.         $response $event->getResponse();
  18.         if (strpos($request->getPathInfo(), '/acc/api/') === 0) {
  19.             $origin $request->headers->get('Origin'$request->getSchemeAndHttpHost());
  20.             $response->headers->set('Access-Control-Allow-Origin'$origin);
  21.             $response->headers->set('Access-Control-Allow-Methods''POST, GET, OPTIONS');
  22.             $response->headers->set('Access-Control-Allow-Headers''Content-Type, Accept, X-Requested-With, Authorization');
  23.             $response->headers->set('Access-Control-Allow-Credentials''true');
  24.             $exposeHeaders = ['X-Access-Login''X-Access-Email''X-Access-Token''X-Access-Avatar'];
  25.             $existingHeaders = [];
  26.             foreach ($exposeHeaders as $header) {
  27.                 if ($response->headers->has($header)) {
  28.                     $existingHeaders[] = $header;
  29.                 }
  30.             }
  31.             if (!empty($existingHeaders)) {
  32.                 $response->headers->set(
  33.                     'Access-Control-Expose-Headers',
  34.                     implode(', '$existingHeaders)
  35.                 );
  36.             } else {
  37.                 $response->headers->set(
  38.                     'Access-Control-Expose-Headers',
  39.                     'X-Access-Login, X-Access-Email, X-Access-Token, X-Access-Agency, X-Access-Onsite, X-Access-Avatar'
  40.                 );
  41.             }
  42.         }
  43.         $currentLocale $request->getLocale();
  44.         $response->headers->set('x-ip-country'strtoupper($currentLocale));
  45.     }
  46. }