Passed
Push — master ( fc05cd...bc2e67 )
by Sébastien
02:18
created

AccessLoggerMiddleware::getClientIp()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 1
dl 0
loc 7
ccs 0
cts 7
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Middleware;
6
7
use App\Infra\Log\AccessLogger;
8
use Psr\Http\Message\ResponseInterface;
9
use Psr\Http\Message\ServerRequestInterface;
10
use Psr\Http\Server\MiddlewareInterface;
11
use Psr\Http\Server\RequestHandlerInterface;
12
13
class AccessLoggerMiddleware implements MiddlewareInterface
14
{
15
    /**
16
     * @var AccessLogger
17
     */
18
    private $accessLogger;
19
20
    public function __construct(AccessLogger $accessLogger)
21
    {
22
        $this->accessLogger = $accessLogger;
23
    }
24
25
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
26
    {
27
        $response = $handler->handle($request);
28
29
        $ip = $this->getClientIp($request);
30
        $email = $this->getEmail($request);
31
32
        try {
33
            $this->accessLogger->log(
34
                $response->getStatusCode() === 200 ? AccessLogger::TYPE_LOGIN_SUCCESS :
35
				AccessLogger::TYPE_LOGIN_FAILURE,
36
                $email,
37
                $ip
38
            );
39
        } catch (\Throwable $e) {
40
            // Discard any error
41
            error_log('AccessLoggerMiddleware failure' . $e->getMessage());
42
        } finally {
43
            return $response;
44
        }
45
    }
46
47
    private function getEmail(ServerRequestInterface $request): string {
48
		$body = $request->getParsedBody();
49
		return trim($body['email'] ?? '');
50
	}
51
52
    private function getClientIp(ServerRequestInterface $request): ?string
53
    {
54
        $serverParams = $request->getServerParams();
55
        if (isset($serverParams['REMOTE_ADDR'])) {
56
            return $serverParams['REMOTE_ADDR'];
57
        }
58
        return null;
59
    }
60
}
61