Completed
Push — master ( 93f139...2c2120 )
by Elf
02:28
created

VerifyApiToken::handle()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
ccs 0
cts 8
cp 0
rs 9.4285
cc 2
eloc 5
nc 2
nop 2
crap 6
1
<?php
2
3
namespace ElfSundae\Laravel\Api\Http\Middleware;
4
5
use Closure;
6
use ElfSundae\Laravel\Api\Token;
7
8
class VerifyApiToken
9
{
10
    /**
11
     * The Token instance.
12
     *
13
     * @var \ElfSundae\Laravel\Api\Token
14
     */
15
    protected $token;
16
17
    /**
18
     * Create the middleware.
19
     *
20
     * @param  \ElfSundae\Laravel\Api\Token  $token
21
     */
22
    public function __construct(Token $token)
23
    {
24
        $this->token = $token;
25
    }
26
27
    /**
28
     * Handle an incoming request.
29
     *
30
     * @param  \Illuminate\Http\Request  $request
31
     * @param  \Closure  $next
32
     * @return mixed
33
     */
34
    public function handle($request, Closure $next)
35
    {
36
        if ($this->verifyToken($request)) {
37
            $request->attributes->set('current_app_key', $this->getKey($request));
38
39
            return $next($request);
40
        }
41
42
        return response('Forbidden Request', 403);
43
    }
44
45
    /**
46
     * Verify the api token from request.
47
     *
48
     * @param  \Illuminate\Http\Request  $request
49
     * @return bool
50
     */
51
    protected function verifyToken($request)
52
    {
53
        if ($time = $this->getTime($request)) {
54
            $verifyTime = abs(time() - $time) < (int) config('api.token_duration');
55
            $verifyToken = $this->token->verify($this->getToken($request), $this->getKey($request), $time);
56
57
            return $verifyTime && $verifyToken;
58
        }
59
60
        return false;
61
    }
62
63
    /**
64
     * Get the app key.
65
     *
66
     * @param  \Illuminate\Http\Request  $request
67
     * @return string
68
     */
69
    protected function getKey($request)
70
    {
71
        return $request->input('_key') ?: $request->header('X-API-KEY');
72
    }
73
74
    /**
75
     * Get the time.
76
     *
77
     * @param  \Illuminate\Http\Request  $request
78
     * @return int
79
     */
80
    protected function getTime($request)
81
    {
82
        return (int) ($request->input('_time') ?: $request->header('X-API-TIME'));
83
    }
84
85
    /**
86
     * Get the api token.
87
     *
88
     * @param  \Illuminate\Http\Request  $request
89
     * @return string
90
     */
91
    protected function getToken($request)
92
    {
93
        return $request->input('_token') ?: $request->header('X-API-TOKEN');
94
    }
95
}
96