RequestIdMiddleware::__invoke()   B
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 26
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 26
rs 8.8571
c 0
b 0
f 0
cc 3
eloc 17
nc 4
nop 2
1
<?php declare(strict_types = 1);
2
3
namespace Link0\Bunq\Middleware;
4
5
use GuzzleHttp\Psr7\Request;
6
use Psr\Http\Message\RequestInterface;
7
use Ramsey\Uuid\Uuid;
8
9
final class RequestIdMiddleware
10
{
11
    private $sessionToken;
12
    public function __construct($sessionToken)
13
    {
14
        $this->sessionToken = $sessionToken;
15
    }
16
17
    /**
18
     * @param RequestInterface $request
19
     * @param array $options
20
     * @return Request
21
     */
22
    public function __invoke(RequestInterface $request, array $options = [])
23
    {
24
        $requestId = Uuid::uuid4()->toString();
25
        if (isset($options['request-id'])) {
26
            $requestId = $options['request-id'];
27
        }
28
29
        $headers = $request->getHeaders();
30
        $headers['X-Bunq-Client-Request-Id'][] = $requestId;
31
        $headers['Cache-Control'][] = 'no-cache';
32
        $headers['X-Bunq-Geolocation'][] = '52.3 4.89 12 100 NL';
33
        $headers['X-Bunq-Language'][] = 'en_US';
34
        $headers['X-Bunq-Region'][] = 'en_US';
35
36
        // Use the session token if not overridden with installation token
37
        if (!isset($headers['X-Bunq-Client-Authentication'])) {
38
            $headers['X-Bunq-Client-Authentication'] = $this->sessionToken;
39
        }
40
41
        return new Request(
42
            $request->getMethod(),
43
            $request->getUri(),
44
            $headers,
45
            $request->getBody()
46
        );
47
    }
48
}
49