AuthenticationMiddleware   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
eloc 9
dl 0
loc 29
ccs 11
cts 11
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A process() 0 20 4
A __construct() 0 2 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Application\Middleware;
6
7
use Application\Model\User;
8
use Application\Repository\UserRepository;
9
use Mezzio\Session\SessionInterface;
10
use Mezzio\Session\SessionMiddleware;
11
use Psr\Http\Message\ResponseInterface;
12
use Psr\Http\Message\ServerRequestInterface;
13
use Psr\Http\Server\MiddlewareInterface;
14
use Psr\Http\Server\RequestHandlerInterface;
15
16
class AuthenticationMiddleware implements MiddlewareInterface
17
{
18 3
    public function __construct(private readonly UserRepository $userRepository)
19
    {
20 3
    }
21
22
    /**
23
     * Load current user from session if exists and still valid.
24
     */
25 3
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
26
    {
27
        /** @var SessionInterface $session */
28 3
        $session = $request->getAttribute(SessionMiddleware::SESSION_ATTRIBUTE);
29
30 3
        if ($session->has('user')) {
31 2
            $user = $this->userRepository->getOneById($session->get('user'));
32
33 2
            if ($user) {
34 1
                User::setCurrent($user);
35
            }
36
37
            // If we were supposed to be logged in, but the user is not available anymore, that means the user
38
            // was forcibly logged out (likely deleted), so we clear his entire session
39 2
            if (!User::getCurrent()) {
40 1
                $session->clear();
41
            }
42
        }
43
44 3
        return $handler->handle($request);
45
    }
46
}
47