ResponseSigner   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 17
dl 0
loc 60
ccs 15
cts 15
cp 1
rs 10
c 1
b 0
f 0
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 2
A signResponse() 0 20 1
1
<?php
2
3
namespace Acquia\Hmac;
4
5
use Acquia\Hmac\Digest\Digest;
6
use Acquia\Hmac\Digest\DigestInterface;
7
use Psr\Http\Message\RequestInterface;
8
use Psr\Http\Message\ResponseInterface;
9
10
/**
11
 * Signs responses according to the HTTP HMAC spec.
12
 */
13
class ResponseSigner implements ResponseSignerInterface
14
{
15
    /**
16
     * @var \Acquia\Hmac\KeyInterface
17
     *   The key with which to sign the response.
18
     */
19
    protected $key;
20
21
    /**
22
     * @var \Psr\Http\Message\RequestInterface
23
     *   The original response corresponding to the response being signed.
24
     */
25
    protected $request;
26
27
    /**
28
     * @var \Acquia\Hmac\Digest\DigestInterface
29
     *   The digest with which to sign the response.
30
     */
31
    protected $digest;
32
    /**
33
     * Initializes the response signer with a key and request.
34
     *
35
     * @param \Acquia\Hmac\KeyInterface $key
36
     *   The key with which to sign the response.
37
     * @param \Psr\Http\Message\RequestInterface $request
38
     *   The original response corresponding to the response being signed.
39
     * @param \Acquia\Hmac\Digest\Digest $digest
40
     *   The digest with which to sign the response. Defaults to
41
     *   \Acquia\Hmac\Digest\Digest.
42
     */
43 10
    public function __construct(KeyInterface $key, RequestInterface $request, DigestInterface $digest = null)
44
    {
45 10
        $this->key = $key;
46 10
        $this->request = $request;
47 10
        $this->digest = $digest ?: new Digest();
48 10
    }
49
50
    /**
51
     * {@inheritDoc}
52
     */
53 10
    public function signResponse(ResponseInterface $response)
54
    {
55 10
        $authHeader = AuthorizationHeader::createFromRequest($this->request);
56
57
        $parts = [
58 10
            $authHeader->getNonce(),
59 10
            $this->request->getHeaderLine('X-Authorization-Timestamp'),
60 10
            (string) $response->getBody(),
61
        ];
62
63 10
        $response->getBody()->rewind();
64
65 10
        $message = implode("\n", $parts);
66
67 10
        $signature = $this->digest->sign($message, $this->key->getSecret());
68
69
        /** @var \Psr\Http\Message\ResponseInterface $response */
70 10
        $response = $response->withHeader('X-Server-Authorization-HMAC-SHA256', $signature);
71
72 10
        return $response;
73
    }
74
}
75