Passed
Push — main ( 0bfc82...b73123 )
by Garbuz
02:45
created

Token::load()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 7
c 1
b 0
f 0
dl 0
loc 10
ccs 0
cts 8
cp 0
rs 10
cc 4
nc 4
nop 1
crap 20
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Garbuzivan\Laraveltokens;
6
7
use Carbon\Carbon;
8
use DateTime;
9
use Garbuzivan\Laraveltokens\Interfaces\ModelToken;
10
use Garbuzivan\Laraveltokens\Models\AccessToken;
11
use Garbuzivan\Laraveltokens\Models\GlobalToken;
12
use Illuminate\Contracts\Auth\Authenticatable;
13
14
class Token
15
{
16
    /**
17
     * @var string|null
18
     */
19
    public ?string $type = null;
20
21
    /**
22
     * @var int
23
     */
24
    public int $id = 0;
25
26
    /**
27
     * @var string
28
     */
29
    public string $token;
30
31
    /**
32
     * @var int
33
     */
34
    public int $user_id;
35
36
    /**
37
     * @var string|null
38
     */
39
    public ?string $user_type = null;
40
41
    /**
42
     * @var string|null
43
     */
44
    public ?string $title = null;
45
46
    /**
47
     * @var DateTime|null
48
     */
49
    public ?DateTime $expiration = null;
50
51
    /**
52
     * @var DateTime|null
53
     */
54
    public ?DateTime $last_use = null;
55
56
    /**
57
     * @var bool
58
     */
59
    public bool $is_valid = false;
60
61
    /**
62
     * @var Authenticatable|null
63
     */
64
    public ?Authenticatable $user = null;
65
66
    /**
67
     * @param ModelToken|null $modelToken
68
     *
69
     * @return $this
70
     */
71
    public function load(?ModelToken $modelToken = null): self
72
    {
73
        if (is_null($modelToken)) {
74
            return $this;
75
        } elseif ($modelToken instanceof AccessToken) {
76
            return $this->loadAccessToken($modelToken);
77
        } elseif ($modelToken instanceof GlobalToken) {
78
            return $this->loadGlobalToken($modelToken);
79
        }
80
        return $this;
81
    }
82
83
    /**
84
     * @param AccessToken $token
85
     *
86
     * @return $this
87
     */
88
    public function loadAccessToken(AccessToken $token): self
89
    {
90
        $this->type = AccessToken::class;
91
        $this->id = $token->id;
92
        $this->token = $token->token;
93
        $this->title = $token->title;
94
        $this->expiration = $token->expiration;
95
        $this->last_use = $token->last_use;
96
        $this->user_id = $token->user_id;
97
        $this->user_type = $token->user_type;
98
        $this->user = $token->user;
99
        $this->is_valid = $token->isValid();
100
        return $this;
101
    }
102
103
    /**
104
     * @param GlobalToken $token
105
     *
106
     * @return $this
107
     */
108
    public function loadGlobalToken(GlobalToken $token): self
109
    {
110
        $this->type = GlobalToken::class;
111
        $this->id = $token->id;
112
        $this->token = $token->token;
113
        $this->title = $token->title;
114
        $this->expiration = $token->expiration;
115
        $this->last_use = $token->last_use;
116
        $this->is_valid = $token->isValid();
117
        return $this;
118
    }
119
120
    /**
121
     * Загружен ли токен
122
     *
123
     * @return bool
124
     */
125
    public function isToken(): bool
126
    {
127
        return !is_null($this->type);
128
    }
129
130
    /**
131
     * Проверка валидности токена по дате
132
     *
133
     * @return bool
134
     */
135
    public function isValid(): bool
136
    {
137
        return $this->isToken() && $this->is_valid;
138
    }
139
}
140