annotate core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php @ 12:7a779792577d

Update Drupal core to v8.4.5 (via Composer)
author Chris Cannam
date Fri, 23 Feb 2018 15:52:07 +0000
parents 4c8ae668cc8c
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Core\StackMiddleware;
Chris@0 4
Chris@0 5 use Drupal\Core\Site\Settings;
Chris@0 6 use Symfony\Component\HttpFoundation\Request;
Chris@0 7 use Symfony\Component\HttpKernel\HttpKernelInterface;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Provides support for reverse proxies.
Chris@0 11 */
Chris@0 12 class ReverseProxyMiddleware implements HttpKernelInterface {
Chris@0 13
Chris@0 14 /**
Chris@0 15 * The decorated kernel.
Chris@0 16 *
Chris@0 17 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
Chris@0 18 */
Chris@0 19 protected $httpKernel;
Chris@0 20
Chris@0 21 /**
Chris@0 22 * The site settings.
Chris@0 23 *
Chris@0 24 * @var \Drupal\Core\Site\Settings
Chris@0 25 */
Chris@0 26 protected $settings;
Chris@0 27
Chris@0 28 /**
Chris@0 29 * Constructs a ReverseProxyMiddleware object.
Chris@0 30 *
Chris@0 31 * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel
Chris@0 32 * The decorated kernel.
Chris@0 33 * @param \Drupal\Core\Site\Settings $settings
Chris@0 34 * The site settings.
Chris@0 35 */
Chris@0 36 public function __construct(HttpKernelInterface $http_kernel, Settings $settings) {
Chris@0 37 $this->httpKernel = $http_kernel;
Chris@0 38 $this->settings = $settings;
Chris@0 39 }
Chris@0 40
Chris@0 41 /**
Chris@0 42 * {@inheritdoc}
Chris@0 43 */
Chris@0 44 public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) {
Chris@0 45 // Initialize proxy settings.
Chris@0 46 static::setSettingsOnRequest($request, $this->settings);
Chris@0 47 return $this->httpKernel->handle($request, $type, $catch);
Chris@0 48 }
Chris@0 49
Chris@0 50 /**
Chris@0 51 * Sets reverse proxy settings on Request object.
Chris@0 52 *
Chris@0 53 * @param \Symfony\Component\HttpFoundation\Request $request
Chris@0 54 * A Request instance.
Chris@0 55 * @param \Drupal\Core\Site\Settings $settings
Chris@0 56 * The site settings.
Chris@0 57 */
Chris@0 58 public static function setSettingsOnRequest(Request $request, Settings $settings) {
Chris@0 59 // Initialize proxy settings.
Chris@0 60 if ($settings->get('reverse_proxy', FALSE)) {
Chris@0 61 $ip_header = $settings->get('reverse_proxy_header', 'X_FORWARDED_FOR');
Chris@0 62 $request::setTrustedHeaderName($request::HEADER_CLIENT_IP, $ip_header);
Chris@0 63
Chris@0 64 $proto_header = $settings->get('reverse_proxy_proto_header', 'X_FORWARDED_PROTO');
Chris@0 65 $request::setTrustedHeaderName($request::HEADER_CLIENT_PROTO, $proto_header);
Chris@0 66
Chris@0 67 $host_header = $settings->get('reverse_proxy_host_header', 'X_FORWARDED_HOST');
Chris@0 68 $request::setTrustedHeaderName($request::HEADER_CLIENT_HOST, $host_header);
Chris@0 69
Chris@0 70 $port_header = $settings->get('reverse_proxy_port_header', 'X_FORWARDED_PORT');
Chris@0 71 $request::setTrustedHeaderName($request::HEADER_CLIENT_PORT, $port_header);
Chris@0 72
Chris@0 73 $forwarded_header = $settings->get('reverse_proxy_forwarded_header', 'FORWARDED');
Chris@0 74 $request::setTrustedHeaderName($request::HEADER_FORWARDED, $forwarded_header);
Chris@0 75
Chris@0 76 $proxies = $settings->get('reverse_proxy_addresses', []);
Chris@0 77 if (count($proxies) > 0) {
Chris@0 78 $request::setTrustedProxies($proxies);
Chris@0 79 }
Chris@0 80 }
Chris@0 81 }
Chris@0 82
Chris@0 83 }