Token   A
last analyzed

Complexity

Total Complexity 24

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 1

Test Coverage

Coverage 88.37%

Importance

Changes 0
Metric Value
wmc 24
lcom 2
cbo 1
dl 0
loc 95
ccs 38
cts 43
cp 0.8837
rs 10
c 0
b 0
f 0

11 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 2
A __toString() 0 4 1
A get() 0 4 2
A mget() 0 4 1
A remove() 0 4 1
A check() 0 4 3
A checkNotBefore() 0 8 2
A checkNotAfter() 0 8 2
A prepareData() 0 13 5
A genString() 0 11 2
A checkData() 0 10 3
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