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