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

VerifyResponseMiddleware::__invoke()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 8
nc 1
nop 1
dl 0
loc 12
ccs 7
cts 7
cp 1
crap 1
rs 9.4285
c 0
b 0
f 0
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