]> git.mxchange.org Git - friendica.git/blob - tests/src/App/RequestTest.php
Respect Forwarded-For headers
[friendica.git] / tests / src / App / RequestTest.php
1 <?php
2
3 namespace Friendica\Test\src\App;
4
5 use Friendica\App\Request;
6 use Friendica\Core\Config\Capability\IManageConfigValues;
7 use Friendica\Test\MockedTest;
8
9 class RequestTest extends MockedTest
10 {
11         public function dataServerArray(): array
12         {
13                 return [
14                         'default' => [
15                                 'server' => ['REMOTE_ADDR' => '1.2.3.4'],
16                                 'config' => [
17                                         'trusted_proxies'       => '',
18                                         'forwarded_for_headers' => '',
19                                 ],
20                                 'assertion' => '1.2.3.4',
21                         ],
22                         'proxy_1' => [
23                                 'server' => ['HTTP_X_FORWARDED_FOR' => '1.2.3.4, 4.5.6.7', 'REMOTE_ADDR' => '1.2.3.4'],
24                                 'config' => [
25                                         'trusted_proxies'       => '1.2.3.4',
26                                         'forwarded_for_headers' => 'HTTP_X_FORWARDED_FOR',
27                                 ],
28                                 'assertion' => '4.5.6.7',
29                         ],
30                         'proxy_2' => [
31                                 'server' => ['HTTP_X_FORWARDED_FOR' => '4.5.6.7, 1.2.3.4', 'REMOTE_ADDR' => '1.2.3.4'],
32                                 'config' => [
33                                         'trusted_proxies'       => '1.2.3.4',
34                                         'forwarded_for_headers' => 'HTTP_X_FORWARDED_FOR',
35                                 ],
36                                 'assertion' => '4.5.6.7',
37                         ],
38                         'proxy_CIDR_multiple_proxies' => [
39                                 'server' => ['HTTP_X_FORWARDED_FOR' => '4.5.6.7, 1.2.3.4', 'REMOTE_ADDR' => '10.0.1.1'],
40                                 'config' => [
41                                         'trusted_proxies'       => '10.0.0.0/16, 1.2.3.4',
42                                         'forwarded_for_headers' => 'HTTP_X_FORWARDED_FOR',
43                                 ],
44                                 'assertion' => '4.5.6.7',
45                         ],
46                         'proxy_wrong_CIDR' => [
47                                 'server' => ['HTTP_X_FORWARDED_FOR' => '4.5.6.7, 1.2.3.4', 'REMOTE_ADDR' => '10.1.0.1'],
48                                 'config' => [
49                                         'trusted_proxies'       => '10.0.0.0/24, 1.2.3.4',
50                                         'forwarded_for_headers' => 'HTTP_X_FORWARDED_FOR',
51                                 ],
52                                 'assertion' => '10.1.0.1',
53                         ],
54                         'proxy_3' => [
55                                 'server' => ['HTTP_X_FORWARDED_FOR' => '1.2.3.4, 4.5.6.7', 'REMOTE_ADDR' => '1.2.3.4'],
56                                 'config' => [
57                                         'trusted_proxies'       => '1.2.3.4',
58                                         'forwarded_for_headers' => 'HTTP_X_FORWARDED_FOR',
59                                 ],
60                                 'assertion' => '4.5.6.7',
61                         ],
62                         'proxy_multiple_header_1' => [
63                                 'server' => ['HTTP_X_FORWARDED' => '1.2.3.4, 4.5.6.7', 'REMOTE_ADDR' => '1.2.3.4'],
64                                 'config' => [
65                                         'trusted_proxies'       => '1.2.3.4',
66                                         'forwarded_for_headers' => 'HTTP_X_FORWARDED_FOR, HTTP_X_FORWARDED',
67                                 ],
68                                 'assertion' => '4.5.6.7',
69                         ],
70                         'proxy_multiple_header_2' => [
71                                 'server' => ['HTTP_X_FORWARDED_FOR' => '1.2.3.4', 'HTTP_X_FORWARDED' => '1.2.3.4, 4.5.6.7', 'REMOTE_ADDR' => '1.2.3.4'],
72                                 'config' => [
73                                         'trusted_proxies'       => '1.2.3.4',
74                                         'forwarded_for_headers' => 'HTTP_X_FORWARDED_FOR, HTTP_X_FORWARDED',
75                                 ],
76                                 'assertion' => '4.5.6.7',
77                         ],
78                         'proxy_multiple_header_wrong' => [
79                                 'server' => ['HTTP_X_FORWARDED_FOR' => '1.2.3.4', 'HTTP_X_FORWARDED' => '1.2.3.4, 4.5.6.7', 'REMOTE_ADDR' => '1.2.3.4'],
80                                 'config' => [
81                                         'trusted_proxies'       => '1.2.3.4',
82                                         'forwarded_for_headers' => '',
83                                 ],
84                                 'assertion' => '1.2.3.4',
85                         ],
86                         'no_remote_addr' => [
87                                 'server' => [],
88                                 'config' => [
89                                         'trusted_proxies'       => '1.2.3.4',
90                                         'forwarded_for_headers' => '',
91                                 ],
92                                 'assertion' => '0.0.0.0',
93                         ],
94                 ];
95         }
96
97         /**
98          * @dataProvider dataServerArray
99          */
100         public function testRemoteAddress(array $server, array $config, string $assertion)
101         {
102                 $configClass = \Mockery::mock(IManageConfigValues::class);
103                 $configClass->shouldReceive('get')->with('proxy', 'trusted_proxies', '')->andReturn($config['trusted_proxies']);
104                 $configClass->shouldReceive('get')->with('proxy', 'forwarded_for_headers')->andReturn($config['forwarded_for_headers']);
105
106                 $request = new Request($configClass, $server);
107
108                 self::assertEquals($assertion, $request->getRemoteAddress());
109         }
110 }