Test Setup Failed
Branch master (1b2352)
by Valery
09:42
created

VerifyCsrfToken::getToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 4
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Middleware;
6
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\Security\Csrf\CsrfToken;
9
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
10
use Symfony\Component\Security\Csrf\Exception\TokenNotFoundException;
11
12
final class VerifyCsrfToken
13
{
14
    private CsrfTokenManagerInterface $tokenManager;
15
16
    public function __construct(CsrfTokenManagerInterface $tokenManager)
17
    {
18
        $this->tokenManager = $tokenManager;
19
    }
20
21
    public function handle(Request $request): void
22
    {
23
        if (!$this->isCsrfTokenValid($this->getToken($request))) {
24
            throw new TokenNotFoundException('Sorry, your session has expired. Please refresh and try again.');
25
        }
26
    }
27
28
    private function isCsrfTokenValid(?string $token): bool
29
    {
30
        return $this->tokenManager->isTokenValid(new CsrfToken('csrf_token', $token));
31
    }
32
33
    private function getToken(Request $request)
34
    {
35
        return $request->query->get('csrf_token')
36
            ?? $request->get('csrf_token');
37
    }
38
}
39