LaravelTokens::handle()   A
last analyzed

Complexity

Conditions 4
Paths 8

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 11
dl 0
loc 17
ccs 0
cts 10
cp 0
rs 9.9
c 1
b 0
f 0
cc 4
nc 8
nop 2
crap 20
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Garbuzivan\Laraveltokens\Middleware;
6
7
use Closure;
8
use Garbuzivan\Laraveltokens\Exceptions\EmptyTokenException;
9
use Garbuzivan\Laraveltokens\Exceptions\TokenIsNotValidException;
10
use Garbuzivan\Laraveltokens\TokenManager;
11
use Illuminate\Contracts\Auth\Authenticatable;
12
use Illuminate\Http\Request;
13
use Illuminate\Support\Facades\Auth;
14
15
class LaravelTokens
16
{
17
    /**
18
     * The request instance.
19
     *
20
     * @var Request
21
     */
22
    protected Request $request;
23
24
    /**
25
     * @var TokenManager
26
     */
27
    protected TokenManager $TokenManager;
28
29
    /**
30
     * @param Request $request
31
     * @param TokenManager $TokenManager
32
     */
33
    public function __construct(Request $request, TokenManager $TokenManager)
34
    {
35
        $this->request = $request;
36
        $this->TokenManager = $TokenManager;
37
    }
38
39
    /**
40
     * Обработка входящего запроса.
41
     *
42
     * @param Request $request
43
     * @param \Closure $next
44
     * @return mixed
45
     */
46
    public function handle($request, Closure $next)
47
    {
48
        try {
49
            $token = $this->getTokenForRequest();
50
        } catch (EmptyTokenException $e) {
51
            abort(403);
52
        }
53
        try {
54
            $token = $this->TokenManager->auth($token);
55
        } catch (TokenIsNotValidException $e) {
56
            abort(403);
57
        }
58
        if ($token->user instanceof Authenticatable) {
59
            Auth::login($token->user);
60
        }
61
        // Если все прошло успешно, то мы пропускаем запрос дальше
62
        return $next($request);
63
    }
64
65
    /**
66
     * Get the token for the current request.
67
     *
68
     * @return string
69
     * @throws EmptyTokenException
70
     */
71
    public function getTokenForRequest(): string
72
    {
73
        $token = $this->request->query('api_token');
74
        if (empty($token)) {
75
            $token = $this->request->input('api_token');
76
        }
77
        if (empty($token)) {
78
            $token = $this->request->bearerToken();
79
        }
80
        if (empty($token)) {
81
            throw new EmptyTokenException;
82
        }
83
        return $token;
84
    }
85
}
86