AuthCsrf::checkToken()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 6
c 1
b 0
f 0
dl 0
loc 9
ccs 6
cts 6
cp 1
rs 10
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace kalanis\kw_auth_forms\Inputs;
4
5
6
use ArrayAccess;
7
use kalanis\kw_forms\Controls\Hidden;
8
use kalanis\kw_forms\Controls\Security\Csrf;
9
use kalanis\kw_forms\Interfaces\ICsrf;
10
use kalanis\kw_rules\Interfaces\IRules;
11
12
13
/**
14
 * Class AuthCsrf
15
 * @package kalanis\kw_auth_forms\Inputs
16
 * Authentication CSRF token
17
 * No limitations like in usual form CSRF token
18
 */
19
class AuthCsrf extends Hidden
20
{
21
    protected ICsrf $csrf;
22
    protected string $csrfTokenAlias = '';
23
24 7
    public function __construct()
25
    {
26 7
        $this->csrf = $this->getCsrfLib();
27 7
    }
28
29 7
    protected function getCsrfLib(): ICsrf
30
    {
31 7
        return new Csrf\Simple();
32
    }
33
34
    /**
35
     * @param string $alias
36
     * @param ArrayAccess<string|int, string|int|float|bool|null> $cookie
37
     * @param string $errorMessage
38
     * @return $this
39
     */
40 7
    public function setHidden(string $alias, ArrayAccess &$cookie, string $errorMessage = ''): self
41
    {
42 7
        $this->csrf->init($cookie);
43 7
        $this->setEntry($alias);
44 7
        $this->csrfTokenAlias = "{$alias}SubmitCheck";
45 7
        $this->setValue($this->csrf->getToken($this->csrfTokenAlias));
46 7
        parent::addRule(IRules::SATISFIES_CALLBACK, $errorMessage, [$this, 'checkToken']);
47 7
        return $this;
48
    }
49
50
    /**
51
     * @param string|int|float $incomingValue
52
     * @return bool
53
     */
54 4
    public function checkToken($incomingValue): bool
55
    {
56 4
        if ($this->csrf->checkToken(strval($incomingValue), $this->csrfTokenAlias)) {
57
            // token reload
58 4
            $this->csrf->removeToken($this->csrfTokenAlias);
59 4
            $this->setValue($this->csrf->getToken($this->csrfTokenAlias));
60 4
            return true;
61
        } else {
62 1
            return false;
63
        }
64
    }
65
}
66