KernelListener::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 4
1
<?php
2
3
namespace Alpixel\Bundle\CMSBundle\Listener;
4
5
use Symfony\Component\HttpFoundation\Cookie;
6
use Symfony\Component\HttpFoundation\RequestStack;
7
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
8
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
9
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
10
11
class KernelListener
12
{
13
    private $requestStack;
14
    private $tokenStorage;
15
    private $secret;
16
    private $authorizationChecker;
17
18
    public function __construct(RequestStack $requestStack, TokenStorage $tokenStorage, AuthorizationChecker $authorizationChecker, $secret)
19
    {
20
        $this->tokenStorage = $tokenStorage;
21
        $this->secret = $secret;
22
        $this->authorizationChecker = $authorizationChecker;
23
        $this->requestStack = $requestStack;
24
    }
25
26
    public function onKernelResponse(FilterResponseEvent $event)
27
    {
28
        $response = $event->getResponse();
29
        $request = $this->requestStack->getMasterRequest();
30
        $route = $request->attributes->get('_route');
31
        $cookies = $request->cookies;
32
33
        $token = $this->tokenStorage->getToken();
34
35
        if ($token !== null && $this->authorizationChecker->isGranted('ROLE_ADMIN')) {
36
            $userSecret = $this->tokenStorage->getToken()->getUser()->getSalt();
37
            $cookie = new Cookie('can_edit', hash('sha256', 'can_edit'.$this->secret.$userSecret), 0, '/', null, false, false);
38
            $response->headers->setCookie($cookie);
39
        } elseif (!in_array($route, ['_profiler', '_wdt']) && $cookies->has('can_edit2')) {
40
            $response->headers->clearCookie('can_edit', '/');
41
        }
42
    }
43
}
44