ControllerListener::beforeController()   B
last analyzed

Complexity

Conditions 5
Paths 3

Size

Total Lines 28
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 14.1113

Importance

Changes 0
Metric Value
dl 0
loc 28
c 0
b 0
f 0
ccs 4
cts 14
cp 0.2857
rs 8.439
cc 5
eloc 13
nc 3
nop 1
crap 14.1113
1
<?php
2
3
namespace AppBundle\EventListener;
4
5
use AppBundle\Entity\User;
6
use AppBundle\Enum\Environment;
7
use Monolog\Logger;
8
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
9
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
10
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
11
12
/**
13
 * @author Vehsamrak
14
 */
15
class ControllerListener
16
{
17
18
    /** @var TokenStorageInterface */
19
    private $tokenStorage;
20
21
    /** @var Logger */
22
    private $logger;
23
24
    /** @var string */
25
    private $environment;
26
27 44
    public function __construct(TokenStorageInterface $tokenStorage, Logger $logger, string $environment)
28
    {
29 44
        $this->tokenStorage = $tokenStorage;
30 44
        $this->logger = $logger;
31 44
        $this->environment = $environment;
32 44
    }
33
34 44
    public function beforeController(FilterControllerEvent $event)
35
    {
36 44
        $controller = $event->getController();
37
38
        /*
39
         * $controller passed can be either a class or a Closure.
40
         * This is not usual in Symfony but it may happen.
41
         * If it is a class, it comes in array format
42
         * Do not process on test environment
43
         */
44 44
        if (!is_array($controller) || $this->environment === Environment::TEST) {
45 44
            return;
46
        }
47
48
        $token = $this->tokenStorage->getToken();
49
        /** @var User|null $user */
50
        $user = $token instanceof TokenInterface ? $token->getUser() : null;
51
        $request = $event->getRequest();
52
53
        $message = sprintf(
54
            '[%s] %s %s',
55
            $user instanceof User ? $user->getLogin() : $request->getClientIp(),
56
            $request->getMethod(),
57
            $request->getPathInfo()
58
        );
59
60
        $this->logger->addInfo($message);
61
    }
62
}
63