Token::remove()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 3
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
/**
3
 * Library for confirmation tokens.
4
 *
5
 * @link      https://github.com/hiqdev/php-confirmator
6
 * @package   php-confirmator
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2016-2017, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hiqdev\php\confirmator;
12
13
class Token
14
{
15
    protected $service;
16
17
    protected $data = [];
18
19
    protected $string;
20
21 3
    public function __construct(ServiceInterface $service, array $data = [], $string = null)
22
    {
23 3
        $this->service = $service;
24 3
        $this->data = $this->prepareData($data);
25 3
        $this->string = $string ?: $this->genString();
26 3
    }
27
28 3
    protected function prepareData(array $data)
29
    {
30 3
        if (empty($data['notAfter'])) {
31 1
            $data['notAfter'] = '+ 1 week';
32
        }
33 3
        foreach ($data as $key => &$value) {
34 3
            if ($key === 'notAfter' || $key === 'notBefore') {
35 3
                $value = date('Y-m-d H:i:s', strtotime($value));
36
            }
37
        }
38
39 3
        return $data;
40
    }
41
42 3
    public function __toString()
43
    {
44 3
        return $this->string;
45
    }
46
47 3
    public function genString($length = 32)
48
    {
49 3
        $res = '';
50 3
        $chars = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
51 3
        $last = strlen($chars) - 1;
52 3
        for ($i = 0; $i < $length; ++$i) {
53 3
            $res .= $chars[mt_rand(0, $last)];
54
        }
55
56 3
        return $res;
57
    }
58
59 2
    public function get($key, $default = null)
60
    {
61 2
        return isset($this->data[$key]) ? $this->data[$key] : $default;
62
    }
63
64 3
    public function mget()
65
    {
66 3
        return $this->data;
67
    }
68
69
    public function remove()
70
    {
71
        $this->service->removeToken($this->string);
72
    }
73
74 2
    public function check(array $data)
75
    {
76 2
        return $this->checkNotAfter() && $this->checkNotBefore() && $this->checkData($data);
77
    }
78
79 1
    public function checkData(array $data)
80
    {
81 1
        foreach ($data as $key => $value) {
82 1
            if ($value !== $this->get($key)) {
83 1
                return false;
84
            }
85
        }
86
87 1
        return true;
88
    }
89
90 2
    public function checkNotBefore()
91
    {
92 2
        if (empty($this->data['notBefore'])) {
93
            return true;
94
        }
95
96 2
        return time() > strtotime($this->data['notBefore']);
97
    }
98
99 2
    public function checkNotAfter()
100
    {
101 2
        if (empty($this->data['notAfter'])) {
102
            return true;
103
        }
104
105 2
        return time() < strtotime($this->data['notAfter']);
106
    }
107
}
108