Passed
Pull Request — master (#56)
by Mark
03:55
created

HmacResponseListener::onKernelResponse()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 3

Importance

Changes 4
Bugs 0 Features 0
Metric Value
cc 3
eloc 12
c 4
b 0
f 0
nc 3
nop 1
dl 0
loc 20
ccs 11
cts 11
cp 1
crap 3
rs 9.8666
1
<?php
2
3
namespace Acquia\Hmac\Symfony;
4
5
use Acquia\Hmac\ResponseSigner;
6
use Laminas\Diactoros\ResponseFactory;
7
use Laminas\Diactoros\ServerRequestFactory;
8
use Laminas\Diactoros\StreamFactory;
9
use Laminas\Diactoros\UploadedFileFactory;
10
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
11
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
12
use Symfony\Component\HttpKernel\Event\ResponseEvent;
13
use Symfony\Component\HttpKernel\KernelEvents;
14
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
15
16
/**
17
 * Signs the response from an HTTP HMAC-authenticated request.
18
 */
19
class HmacResponseListener implements EventSubscriberInterface
20 3
{
21
    /**
22 3
     * @param \Symfony\Component\HttpKernel\Event\ResponseEvent $event
23 1
     */
24
    public function onKernelResponse(ResponseEvent $event)
25
    {
26 2
        if (!$event->isMasterRequest()) {
27 2
            return;
28
        }
29 2
30 1
        $request = $event->getRequest();
31 1
        $response = $event->getResponse();
32
33 1
        if ($request->attributes->has('hmac.key')) {
34 1
            $httpMessageFactory = new PsrHttpFactory(new ServerRequestFactory(), new StreamFactory(), new UploadedFileFactory(), new ResponseFactory());
35
            $foundationFactory = new HttpFoundationFactory();
36 1
37 1
            $psr7Request = $httpMessageFactory->createRequest($request);
38
            $psr7Response = $httpMessageFactory->createResponse($response);
39 1
40
            $signer = new ResponseSigner($request->attributes->get('hmac.key'), $psr7Request);
41 2
            $signedResponse = $signer->signResponse($psr7Response);
42
43
            $event->setResponse($foundationFactory->createResponse($signedResponse));
44
        }
45
    }
46 1
47
    /**
48 1
     * {@inheritdoc}
49
     */
50
    public static function getSubscribedEvents()
51
    {
52
        return [KernelEvents::RESPONSE => 'onKernelResponse'];
53
    }
54
}
55