Completed
Push — master ( fd6c7c...1f9fde )
by Matze
09:32
created

Security   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
c 0
b 0
f 0
lcom 1
cbo 4
dl 0
loc 46
ccs 15
cts 15
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A processResponse() 0 11 3
A getContentSecurityPolicy() 0 10 1
1
<?php
2
3
namespace BrainExe\Core\Middleware;
4
5
use BrainExe\Annotations\Annotations\Inject;
6
use BrainExe\Core\Annotations\Middleware;
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\HttpFoundation\Response;
9
10
/**
11
 * @Middleware("Middleware.Security")
12
 */
13
class Security extends AbstractMiddleware
14
{
15
16
    /**
17
     * @var string
18
     */
19
    private $socketUrl;
20
21
    /**
22
     * @Inject("%socket.url%")
23
     * @param $socketHost
24
     */
25 2
    public function __construct(string $socketHost)
26
    {
27 2
        $this->socketUrl = $socketHost;
28 2
    }
29
30
    /**
31
     * {@inheritdoc}
32
     */
33 2
    public function processResponse(Request $request, Response $response)
34
    {
35 2
        if (!$request->isXmlHttpRequest()) {
36 1
            $response->headers->set('Content-Security-Policy', $this->getContentSecurityPolicy());
37 1
            $response->headers->set('X-Frame-Options', 'DENY');
38
39 1
            if ($request->isSecure()) {
40 1
                $response->headers->set('Strict-Transport-Security', 'max-age=31536000 ; includeSubDomains');
41
            }
42
        }
43 2
    }
44
45
    /**
46
     * @return string
47
     */
48 1
    protected function getContentSecurityPolicy() : string
49
    {
50
        $parts = [
51 1
            'default-src \'self\'',
52 1
            'style-src \'self\' \'unsafe-inline\'',
53 1
            sprintf('connect-src \'self\' %s', $this->socketUrl),
54
        ];
55
56 1
        return implode('; ', $parts);
57
    }
58
}
59