ControllerListener   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 47.37%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 6
dl 0
loc 48
c 0
b 0
f 0
ccs 9
cts 19
cp 0.4737
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
B beforeController() 0 28 5
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