GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — supported-php-versions ( b1e0a1...542ebe )
by
unknown
06:40
created

User   A

Complexity

Total Complexity 32

Size/Duplication

Total Lines 227
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 90.77%

Importance

Changes 0
Metric Value
wmc 32
lcom 1
cbo 3
dl 0
loc 227
ccs 59
cts 65
cp 0.9077
rs 9.6
c 0
b 0
f 0

14 Methods

Rating   Name   Duplication   Size   Complexity  
A getLoginId() 0 4 2
A getRoleId() 0 4 2
A getUnitId() 0 4 2
A getLogoutDate() 0 4 2
A setLoginData() 0 6 1
A resetLoginData() 0 4 1
A isAuthConfirmed() 0 4 1
A setAuthConfirmed() 0 5 1
A updateLogoutTime() 0 22 3
A __construct() 0 9 3
B updateLoginData() 0 22 5
B isLoggedIn() 0 12 5
A confirmAuth() 0 9 2
A saveToSession() 0 6 2
1
<?php
2
3
namespace Skautis;
4
5
use Skautis\SessionAdapter\AdapterInterface;
6
use Skautis\Wsdl\WsdlManager;
7
8
/**
9
 * @author Petr Morávek <[email protected]>
10
 */
11
class User
12
{
13
14
    const ID_LOGIN = "ID_Login";
15
    const ID_ROLE = "ID_Role";
16
    const ID_UNIT = "ID_Unit";
17
    const LOGOUT_DATE = "LOGOUT_Date";
18
    const AUTH_CONFIRMED = "AUTH_Confirmed";
19
    const SESSION_ID = "skautis_user_data";
20
21
    /**
22
     * @var WsdlManager
23
     */
24
    private $wsdlManager;
25
26
    /**
27
     * @var AdapterInterface
28
     */
29
    private $session;
30
31
    /**
32
     * Informace o přihlášení uživatele
33
     *
34
     * @var array
35
     */
36
    protected $loginData = [];
37
38
39
    /**
40
     * @param WsdlManager $wsdlManager
41
     * @param AdapterInterface|null $session
42
     */
43 4
    public function __construct(WsdlManager $wsdlManager, AdapterInterface $session = null)
44
    {
45 4
        $this->wsdlManager = $wsdlManager;
46 4
        $this->session = $session;
47
48 4
        if ($session !== null && $session->has(self::SESSION_ID)) {
49
            $this->loginData = (array)$session->get(self::SESSION_ID);
50
        }
51 4
    }
52
53
    /**
54
     * @return string|null
55
     */
56 3
    public function getLoginId()
57
    {
58 3
        return isset($this->loginData[self::ID_LOGIN]) ? $this->loginData[self::ID_LOGIN] : null;
59
    }
60
61
    /**
62
     * @return int|null
63
     */
64 2
    public function getRoleId()
65
    {
66 2
        return isset($this->loginData[self::ID_ROLE]) ? $this->loginData[self::ID_ROLE] : null;
67
    }
68
69
    /**
70
     * @return int|null
71
     */
72 2
    public function getUnitId()
73
    {
74 2
        return isset($this->loginData[self::ID_UNIT]) ? $this->loginData[self::ID_UNIT] : null;
75
    }
76
77
    /**
78
     * Vrací datum a čas automatického odhlášení ze skautISu
79
     *
80
     * @return \DateTime
81
     */
82 3
    public function getLogoutDate()
83
    {
84 3
        return isset($this->loginData[self::LOGOUT_DATE]) ? $this->loginData[self::LOGOUT_DATE] : null;
85
    }
86
87
    /**
88
     * Hromadné nastavení po přihlášení
89
     *
90
     * @param string|null $loginId
91
     * @param int|null $roleId
92
     * @param int|null $unitId
93
     * @param \DateTime|null $logoutDate
94
     * @return self
95
     */
96 3
    public function setLoginData($loginId = null, $roleId = null, $unitId = null, \DateTime $logoutDate = null)
97
    {
98 3
        $this->loginData = [];
99
100 3
        return $this->updateLoginData($loginId, $roleId, $unitId, $logoutDate);
101
    }
102
    
103
    /**
104
     * Hromadná změna údajů, bez vymazání stávajících
105
     *
106
     * @param string|null $loginId
107
     * @param int|null $roleId
108
     * @param int|null $unitId
109
     * @param \DateTime|null $logoutDate
110
     * @return self
111
     */
112 3
    public function updateLoginData($loginId = null, $roleId = null, $unitId = null, \DateTime $logoutDate = null)
113
    {
114 3
        if ($loginId !== null) {
115 3
            $this->loginData[self::ID_LOGIN] = $loginId;
116
        }
117
118 3
        if ($roleId !== null) {
119 3
            $this->loginData[self::ID_ROLE] = (int) $roleId;
120
        }
121
122 3
        if ($unitId !== null) {
123 3
            $this->loginData[self::ID_UNIT] = (int) $unitId;
124
        }
125
126 3
        if ($logoutDate !== null) {
127 3
            $this->loginData[self::LOGOUT_DATE] = $logoutDate;
128
        }
129
130 3
        $this->saveToSession();
131
132 3
        return $this;
133
    }
134
135
    /**
136
     * Hromadný reset dat po odhlášení
137
     *
138
     * @return self
139
     */
140 1
    public function resetLoginData()
141
    {
142 1
        return $this->setLoginData();
143
    }
144
145
    /**
146
     * Kontoluje, jestli je přihlášení platné.
147
     * Pro správné fungování je nezbytně nutné, aby byl na serveru nastaven správný čas.
148
     *
149
     * @param bool $hardCheck vynutí kontrolu přihlášení na serveru
150
     * @return bool
151
     */
152 2
    public function isLoggedIn($hardCheck = false)
153
    {
154 2
        if (empty($this->loginData[self::ID_LOGIN])) {
155 1
            return false;
156
        }
157
158 1
        if ($hardCheck || !$this->isAuthConfirmed()) {
159 1
            $this->confirmAuth();
160
        }
161
162 1
        return $this->isAuthConfirmed() && $this->getLogoutDate()->getTimestamp() > time();
163
    }
164
165
    /**
166
     * Bylo potvrzeno přihlášení dotazem na skautIS?
167
     *
168
     * @return bool
169
     */
170 1
    protected function isAuthConfirmed()
171
    {
172 1
        return !empty($this->loginData[self::AUTH_CONFIRMED]);
173
    }
174
175
    /**
176
     * @param bool $isConfirmed
177
     */
178 1
    protected function setAuthConfirmed($isConfirmed)
179
    {
180 1
        $this->loginData[self::AUTH_CONFIRMED] = (bool) $isConfirmed;
181 1
        $this->saveToSession();
182 1
    }
183
184
    /**
185
     * Potvrdí (a prodlouží) přihlášení dotazem na skautIS.
186
     */
187 1
    protected function confirmAuth()
188
    {
189
        try {
190 1
            $this->updateLogoutTime();
191 1
            $this->setAuthConfirmed(true);
192
        } catch (\Exception $e) {
193
            $this->setAuthConfirmed(false);
194
        }
195 1
    }
196
197
    /**
198
     * Prodloužení přihlášení o 30 min
199
     *
200
     * @return self
201
     * @throws UnexpectedValueException pokud se nepodaří naparsovat datum
202
     */
203 1
    public function updateLogoutTime()
204
    {
205 1
        $loginId = $this->getLoginId();
206 1
        if ($loginId === null) {
207
            // Nemáme token, uživatel není přihlášen a není, co prodlužovat
208
            return $this;
209
        }
210
211 1
        $result = $this->wsdlManager->getWebService('UserManagement', $loginId)->LoginUpdateRefresh(["ID" => $loginId]);
212
213 1
        $logoutDate = preg_replace('/\.(\d*)$/', '', $result->DateLogout); //skautIS vrací sekundy včetně desetinné části
214 1
        $tz = new \DateTimeZone('Europe/Prague');
215 1
        $logoutDate = \DateTime::createFromFormat('Y-m-d\TH:i:s', $logoutDate, $tz);
216 1
        if ($logoutDate === false) {
217
            throw new UnexpectedValueException("Could not parse logout date '{$result->DateLogout}'.");
218
        }
219 1
        $this->loginData[self::LOGOUT_DATE] = $logoutDate;
220
221 1
        $this->saveToSession();
222
223 1
        return $this;
224
    }
225
226
    /**
227
     * Uloží nastavení do session
228
     *
229
     * @return void
230
     */
231 3
    protected function saveToSession()
232
    {
233 3
        if ($this->session !== null) {
234
            $this->session->set(self::SESSION_ID, $this->loginData);
235
        }
236 3
    }
237
}
238