Passed
Push — master ( c59e68...e567a6 )
by Thierry
04:50 queued 04:04
created

VerifyResponseMiddleware   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 30
ccs 11
cts 11
cp 1
rs 10
c 0
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 12 1
A __construct() 0 4 1
1
<?php
2
declare(strict_types=1);
3
4
namespace lepiaf\SapientBundle\GuzzleHttp\Middleware;
5
6
use lepiaf\SapientBundle\Service\PublicKeyGetter;
7
use ParagonIE\ConstantTime\Base64UrlSafe;
8
use ParagonIE\Sapient\CryptographyKeys\SigningPublicKey;
9
use ParagonIE\Sapient\Sapient;
10
use Psr\Http\Message\RequestInterface;
11
use Psr\Http\Message\ResponseInterface;
12
13
class VerifyResponseMiddleware
14
{
15
    /**
16
     * @var Sapient
17
     */
18
    private $sapient;
19
20
    /**
21
     * @var PublicKeyGetter
22
     */
23
    private $publicKeyGetter;
24
25 2
    public function __construct(Sapient $sapient, PublicKeyGetter $publicKeyGetter)
26
    {
27 2
        $this->sapient = $sapient;
28 2
        $this->publicKeyGetter = $publicKeyGetter;
29 2
    }
30
31 2
    public function __invoke(callable $handler): callable
32
    {
33
        return function(RequestInterface $request, array $options) use ($handler) {
34 2
            return $handler($request, $options)->then(
35
                function(ResponseInterface $response) {
36 2
                    $publicKey = $this->publicKeyGetter->getVerifyingKey($response);
37 2
                    $this->sapient->verifySignedResponse(
38 2
                        $response,
39 2
                        new SigningPublicKey(Base64UrlSafe::decode($publicKey))
40
                    );
41
42 1
                    return $response;
43 2
                }
44
            );
45 2
        };
46
    }
47
}
48