Passed
Push — master ( cfcc32...578e4e )
by Pol
02:00
created

RequestHeadersAlter::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EcPhp\ReverseProxyHelperBundle\Service;
6
7
use Symfony\Component\HttpFoundation\Request;
8
9
use function array_key_exists;
10
11
use const FILTER_VALIDATE_URL;
12
13
final class RequestHeadersAlter implements RequestAlterInterface
14
{
15
    /**
16
     * @var array<mixed>
17
     */
18
    private array $parameters;
19
20
    /**
21
     * @param array<mixed> $parameters
22
     */
23 7
    public function __construct(array $parameters)
24
    {
25 7
        $this->parameters = $parameters;
26 7
    }
27
28 6
    public function alter(Request $request): Request
29
    {
30 6
        $parsed = parse_url($this->parameters['base_url']);
31
32 6
        if (false === array_key_exists('host', $parsed)) {
33 2
            return $request;
34
        }
35
36 4
        if (false === filter_var($this->parameters['base_url'], FILTER_VALIDATE_URL)) {
37 1
            return $request;
38
        }
39
40
        $request
41 3
            ->headers
42 3
            ->add(
43 3
                array_map(
44 3
                    static fn (string $key): string => (string) $parsed[$key],
45 3
                    array_filter(
46
                        [
47 3
                            'X-Forwarded-Host' => 'host',
48
                            'X-Forwarded-Proto' => 'scheme',
49
                            'X-Forwarded-Port' => 'port',
50
                            'X-Forwarded-Prefix' => 'path',
51
                        ],
52 3
                        static fn (string $key): bool => array_key_exists($key, $parsed)
53 3
                    )
54
                )
55
            );
56
57 3
        return $request;
58
    }
59
}
60