vendor/ibexa/core/src/bundle/Core/EventSubscriber/TrustedHeaderClientIpEventSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\Bundle\Core\EventSubscriber;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpKernel\Event\RequestEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. final class TrustedHeaderClientIpEventSubscriber implements EventSubscriberInterface
  13. {
  14.     private const PLATFORM_SH_TRUSTED_HEADER_CLIENT_IP 'X-Client-IP';
  15.     private ?string $trustedHeaderName;
  16.     public function __construct(
  17.         ?string $trustedHeaderName
  18.     ) {
  19.         $this->trustedHeaderName $trustedHeaderName;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             KernelEvents::REQUEST => ['onKernelRequest'PHP_INT_MAX],
  25.         ];
  26.     }
  27.     public function onKernelRequest(RequestEvent $event): void
  28.     {
  29.         $request $event->getRequest();
  30.         $trustedProxies Request::getTrustedProxies();
  31.         $trustedHeaderSet Request::getTrustedHeaderSet();
  32.         $trustedHeaderName $this->trustedHeaderName;
  33.         if (null === $trustedHeaderName && $this->isPlatformShProxy($request)) {
  34.             $trustedHeaderName self::PLATFORM_SH_TRUSTED_HEADER_CLIENT_IP;
  35.         }
  36.         if (null === $trustedHeaderName) {
  37.             return;
  38.         }
  39.         $trustedClientIp $request->headers->get($trustedHeaderName);
  40.         if (null !== $trustedClientIp) {
  41.             if ($trustedHeaderSet !== -1) {
  42.                 $trustedHeaderSet |= Request::HEADER_X_FORWARDED_FOR;
  43.             }
  44.             $request->headers->set('X_FORWARDED_FOR'$trustedClientIp);
  45.         }
  46.         Request::setTrustedProxies($trustedProxies$trustedHeaderSet);
  47.     }
  48.     private function isPlatformShProxy(Request $request): bool
  49.     {
  50.         return null !== $request->server->get('PLATFORM_RELATIONSHIPS');
  51.     }
  52. }