src/EventSubscriber/ForceHttpsFromProxySubscriber.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\RequestEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. class ForceHttpsFromProxySubscriber implements EventSubscriberInterface
  7. {
  8.     public static function getSubscribedEvents(): array
  9.     {
  10.         return [
  11.             KernelEvents::REQUEST => ['onKernelRequest'2048],
  12.         ];
  13.     }
  14.     public function onKernelRequest(RequestEvent $event): void
  15.     {
  16.         $request $event->getRequest();
  17.         if ($request->isSecure()) {
  18.             return;
  19.         }
  20.         $forwarded strtolower((string) $request->headers->get('forwarded'''));
  21.         $xForwardedProto strtolower((string) $request->headers->get('x-forwarded-proto'''));
  22.         $xForwardedSsl strtolower((string) $request->headers->get('x-forwarded-ssl'''));
  23.         $xUrlScheme strtolower((string) $request->headers->get('x-url-scheme'''));
  24.         $frontEndHttps strtolower((string) $request->headers->get('front-end-https'''));
  25.         $isHttpsFromProxy =
  26.             str_contains($forwarded'proto=https')
  27.             || str_contains($xForwardedProto'https')
  28.             || 'on' === $xForwardedSsl
  29.             || 'https' === $xUrlScheme
  30.             || 'on' === $frontEndHttps;
  31.         if (!$isHttpsFromProxy) {
  32.             return;
  33.         }
  34.         $request->server->set('HTTPS''on');
  35.         $request->server->set('SERVER_PORT'443);
  36.     }
  37. }