Psr7RequestSigner::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 4
rs 10
c 1
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Rezzza\SecurityBundle\Request;
4
5
use Rezzza\SecurityBundle\Security\Firewall\SignatureConfig;
6
use Rezzza\SecurityBundle\Security\Firewall\SignedRequest;
7
use Psr\Http\Message\RequestInterface;
8
9
/**
10
 * Psr7RequestSigner
11
 *
12
 * @author Stephane PY <[email protected]>
13
 */
14
class Psr7RequestSigner
15
{
16
    /** @var SignatureConfig */
17
    private $signatureConfig;
18
19
    /**
20
     * @param SignatureConfig $signatureConfig signatureConfig
21
     */
22
    public function __construct(SignatureConfig $signatureConfig)
23
    {
24
        $this->signatureConfig = $signatureConfig;
25
    }
26
27
    /**
28
     * @param RequestInterface $request request
29
     *
30
     * @return RequestInterface
31
     */
32
    public function sign(RequestInterface $request)
33
    {
34
        $replayProtectionEnabled = $this->signatureConfig->isReplayProtectionEnabled();
35
        $time = $replayProtectionEnabled ? time() : null;
36
37
        $signedRequest = new SignedRequest(
38
            $request->getMethod(),
39
            $request->getUri()->getHost(),
40
            $request->getUri()->getPath(),
41
            (string) $request->getBody(),
42
            $time
43
        );
44
45
        $signature = $signedRequest->buildSignature($this->signatureConfig);
46
        $uri = $request->getUri();
47
48
        $query = $uri->getQuery();
49
        if (false === empty($query)) {
50
            $query .= '&';
51
        }
52
        $query .= '_signature='.$signature;
53
54
        if ($replayProtectionEnabled) {
55
            $query .= '&_signature_ttl='.$time;
56
        }
57
58
        $uri = $uri->withQuery($query);
59
60
        return $request->withUri($uri);
61
    }
62
}
63