Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
21 / 21
Auth
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
10
100.00% covered (success)
100.00%
21 / 21
 createToken
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
8 / 8
 ttl
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 check
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 delete
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
6 / 6
 redisKey
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 generate
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
1<?php
2
3
4namespace Qmp\Laravel\ExternalUsers\Services\Auth;
5
6
7use Illuminate\Support\Facades\Redis;
8use Illuminate\Support\Str;
9use Qmp\Laravel\ExternalUsers\Models\User;
10
11class Auth
12{
13    const TOKEN_TTL = 86400; // 24h in sec
14
15    public static function createToken(User $user)
16    {
17        if ($user->api_token && Redis::get(self::redisKey($user->api_token))) {
18            $token = $user->api_token;
19        } else {
20            $token = self::generate();
21            Redis::set(self::redisKey($token), $user->id);
22            $user->api_token = $token;
23            $user->save();
24        }
25        Redis::expire(self::redisKey($token), self::TOKEN_TTL);
26
27        return $token;
28    }
29
30    public static function ttl($token)
31    {
32        return Redis::ttl(self::redisKey($token));
33    }
34
35    public static function check($token)
36    {
37        $userId = Redis::get(self::redisKey($token));
38        if (!$userId) {
39            return null;
40        }
41
42        return User::findOrfail($userId);
43    }
44
45    public static function delete($token)
46    {
47        $user = self::check($token);
48        if ($user) {
49            $user->api_token = null;
50            $user->save();
51            Redis::del(self::redisKey($token));
52        }
53    }
54
55    protected static function redisKey($token)
56    {
57        return 'external_user:auth:' . $token;
58    }
59
60    protected static function generate()
61    {
62        return Str::random(64);
63    }
64}