Passed
Pull Request — main (#448)
by MusikAnimal
08:33 queued 04:41
created

WebProcessorMonolog::__invoke()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 26
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 16
nc 4
nop 1
dl 0
loc 26
rs 9.7333
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace App\Monolog;
6
7
use Symfony\Component\HttpFoundation\Exception\SessionNotFoundException;
8
use Symfony\Component\HttpFoundation\RequestStack;
9
10
/**
11
 * WebProcessorMonolog extends information included in error reporting.
12
 */
13
class WebProcessorMonolog
14
{
15
    protected RequestStack $requestStack;
16
17
    /**
18
     * WebProcessorMonolog constructor.
19
     * @param RequestStack $requestStack
20
     */
21
    public function __construct(RequestStack $requestStack)
22
    {
23
        $this->requestStack = $requestStack;
24
    }
25
26
    /**
27
     * Adds extra information to the log entry.
28
     * @param array $record
29
     * @return array
30
     */
31
    public function __invoke(array $record): array
32
    {
33
        try {
34
            $session = $this->requestStack->getSession();
35
        } catch (SessionNotFoundException $e) {
36
            return $record;
37
        }
38
        if (!$session->isStarted()) {
39
            return $record;
40
        }
41
42
        $request = $this->requestStack->getCurrentRequest();
43
        $record['extra']['host'] = $request->getHost();
44
        $record['extra']['uri'] = $request->getUri();
45
        $record['extra']['useragent'] = $request->headers->get('User-Agent');
46
        $record['extra']['referer'] = $request->headers->get('referer');
47
48
        // Necessary to combat abuse.
49
        if (null !== $session->get('logged_in_user')) {
50
            $record['extra']['username'] = $session->get('logged_in_user')->username;
51
        } else {
52
            // Intentionally not included if we have a username, for privacy reasons.
53
            $record['extra']['xff'] = $request->headers->get('x-forwarded-for', '');
54
        }
55
56
        return $record;
57
    }
58
}
59