Request::requestLimit()   B
last analyzed

Complexity

Conditions 7
Paths 3

Size

Total Lines 33
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 7
eloc 18
c 1
b 0
f 0
nc 3
nop 3
dl 0
loc 33
rs 8.8333
1
<?php
2
3
namespace ThallesDella\GateKeeper\Modules;
4
5
use ThallesDella\SimpleSession\Session;
6
7
/**
8
 * Gate Keeper | Class Request [ MODULE ]
9
 *
10
 * @category GateKeeper\Modules
11
 * @package  ThallesDella\GateKeeper\Modules
12
 * @author   Thalles D. koester <[email protected]>
13
 * @license  https://choosealicense.com/licenses/mit/ MIT
14
 * @link     https://github.com/thallesdella/gate-keeper
15
 */
16
class Request
17
{
18
    /**
19
     * @param string $key     Form identifier
20
     * @param int    $limit   Request limit
21
     * @param int    $seconds Time for refresh limit
22
     *
23
     * @return bool
24
     */
25
    public function requestLimit(string $key, int $limit = 5, int $seconds = 60): bool
26
    {
27
        $session = new Session();
28
        if ($session->has($key)
29
            && $session->$key->time >= time()
30
            && $session->$key->requests < $limit
31
        ) {
32
            $session->set(
33
                $key,
34
                [
35
                    "time" => time() + $seconds,
36
                    "requests" => $session->$key->requests + 1
37
                ]
38
            );
39
            return false;
40
        }
41
        
42
        if ($session->has($key)
43
            && $session->$key->time >= time()
44
            && $session->$key->requests >= $limit
45
        ) {
46
            return true;
47
        }
48
        
49
        $session->set(
50
            $key,
51
            [
52
                "time" => time() + $seconds,
53
                "requests" => 1
54
            ]
55
        );
56
        
57
        return false;
58
    }
59
}