SessionAuthRedirect   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Test Coverage

Coverage 91.3%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 7
eloc 26
c 3
b 0
f 0
dl 0
loc 53
ccs 21
cts 23
cp 0.913
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A process() 0 31 6
1
<?php
2
3
namespace Bone\User\Http\Middleware;
4
5
use Bone\Http\Response;
6
use Bone\Paseto\PasetoService;
7
use Bone\Server\SessionAwareInterface;
8
use Bone\Server\Traits\HasSessionTrait;
9
use Del\Exception\UserException;
10
use Del\Service\UserService;
11
use Del\SessionManager;
12
use Exception;
13
use Psr\Http\Message\ResponseInterface;
14
use Psr\Http\Message\ServerRequestInterface;
15
use Psr\Http\Server\MiddlewareInterface;
16
use Psr\Http\Server\RequestHandlerInterface;
17
use Laminas\Diactoros\Response\RedirectResponse;
18
use Laminas\Diactoros\Uri;
19
20
class SessionAuthRedirect implements MiddlewareInterface, SessionAwareInterface
21
{
22
    use HasSessionTrait;
23
24
    /** @var UserService $userService */
25
    private $userService;
26
27
    /** @var PasetoService $pasetoService */
28
    private $pasetoService;
29
30 3
    public function __construct(SessionManager $sessionManager, UserService $userService, PasetoService $pasetoService)
31
    {
32 3
        $this->setSession($sessionManager);
33 3
        $this->userService = $userService;
34 3
        $this->pasetoService = $pasetoService;
35
    }
36
37
    /**
38
     * @param ServerRequestInterface $request
39
     * @param RequestHandlerInterface $handler
40
     * @return ResponseInterface
41
     */
42 2
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
43
    {
44 2
        $cookies = $request->getCookieParams();
45 2
        $id = $this->getSession()->get('user');
46
47 2
        if (!$id && isset($cookies['resu'])) {
48
            try {
49 1
                $string = $cookies['resu'];
50 1
                $token = $this->pasetoService->decryptToken($string);
51 1
                $id = $token->getClaims()['user'];
52
            } catch (Exception $e) {
53
                return new RedirectResponse(new Uri('/user/login'));
54
            }
55
        }
56
57 2
        if ($id) {
58 1
            $user = $this->userService->findUserById($id);
59 1
            $request = $request->withAttribute('user', $user);
60 1
            $response = $handler->handle($request);
61
62 1
            if ($response instanceof Response) {
63 1
                $response->setAttribute('user', $user);
64
            }
65
66 1
            return $response;
67
        }
68
69 1
        $currentUrl = $request->getUri()->getPath() . '?' . $request->getUri()->getQuery();
70 1
        $this->getSession()->set('loginRedirectRoute', $currentUrl);
71
72 1
        return new RedirectResponse(new Uri('/user/login'));
73
    }
74
}