AuthCsrf   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
eloc 17
c 1
b 0
f 0
dl 0
loc 44
ccs 18
cts 18
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A setHidden() 0 8 1
A __construct() 0 3 1
A checkToken() 0 9 2
A getCsrfLib() 0 3 1
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