Passed
Push — master ( 58d207...d4720a )
by Paul
07:20
created

AccessTokenController::create()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 9
c 1
b 0
f 0
nc 4
nop 1
dl 0
loc 18
rs 9.9666
1
<?php
2
3
namespace Devpri\Tinre\Http\Controllers\Web;
4
5
use Devpri\Tinre\Http\Controllers\Controller;
6
use Devpri\Tinre\Http\Resources\Web\AccessToken as AccessTokenResource;
7
use Devpri\Tinre\Models\AccessToken;
8
use Illuminate\Http\Request;
9
10
class AccessTokenController extends Controller
11
{
12
13
    public function index(Request $request)
14
    {
15
        $user = $request->user();
16
17
        $query = AccessToken::query();
18
19
        if ($user->cant('viewAny', AccessToken::class)) {
20
            $query->where('user_id', $user->id);
21
        }
22
        
23
        $accessTokens = $query->orderBy('created_at', 'desc')->paginate(20);
24
25
        return AccessTokenResource::collection($accessTokens)->additional(['authorized_actions' => (new AccessToken)->authorizedActions()]);
26
    }
27
28
    public function show(Request $request, $id)
29
    {
30
        $accessToken = AccessToken::where('id', $id)->firstOrFail();
31
32
        $user = $request->user();
33
34
        if ($user->cant('view', $accessToken)) {
35
            abort(401);
36
        }
37
38
        return (new AccessTokenResource($accessToken));
39
    }
40
41
    public function create(Request $request)
42
    {
43
        $request->validate([
44
            'name' => ['required', 'string', 'max:255'],
45
            'permissions' => ['nullable', 'array']
46
        ]);
47
        
48
        $user = $request->user();
49
50
        if ($user->cant('create', AccessToken::class)) {
51
            abort(401);
52
        }
53
54
        $permissions = $request->permissions ? array_intersect($user->apiPermissions(), $request->permissions) : null;
55
56
        $accessToken = $user->createToken($request->name, $permissions);
57
58
        return (new AccessTokenResource($accessToken))->additional(['message' => __('The access token has been created.')]);
59
    }
60
61
    public function update(Request $request, $id)
62
    {
63
        $request->validate([
64
            'name' => ['required', 'string', 'max:255'],
65
            'permissions' => ['nullable', 'array']
66
        ]);
67
        
68
        $user = $request->user();
69
        
70
        $accessToken = AccessToken::where('id', $id)->firstOrFail();
71
        
72
        if ($user->cant('update', $accessToken)) {
73
            abort(401);
74
        }
75
76
        if($request->permissions) {
77
            $request->permissions = array_intersect(config('tinre.api_permissions', []), $request->permissions);
0 ignored issues
show
Bug introduced by
The property permissions does not seem to exist on Illuminate\Http\Request.
Loading history...
78
        }
79
        
80
        $permissions = $request->permissions ? array_intersect($user->apiPermissions(), $request->permissions) : null;
81
82
        $accessToken->update([
83
            'name' => $request->name,
84
            'permissions' => $permissions,
85
        ]);
86
87
        return (new AccessTokenResource($accessToken))->additional(['message' => __('The access token has been updated.')]);
88
    }
89
90
    public function delete(Request $request, $id)
91
    {
92
        $user = $request->user();
93
94
        $accessToken = AccessToken::where('id', $id)->firstOrFail();
95
96
        if ($user->cant('delete', $accessToken)) {
97
            abort(401);
98
        }
99
100
        $accessToken->delete();
101
102
        return ['message' => __('The access token has been deleted.')];
103
    }
104
}
105