Passed
Push — master ( d7f532...10eff5 )
by Paul
05:26
created

AccessTokenController::update()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 27
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 14
c 1
b 0
f 0
nc 8
nop 2
dl 0
loc 27
ccs 14
cts 14
cp 1
crap 4
rs 9.7998
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 2
    public function index(Request $request)
13
    {
14 2
        $user = $request->user();
15
16 2
        if (! $user->hasAnyPermission(['access_token:view', 'access_token:view:any'])) {
17
            abort(401);
18
        }
19
20 2
        $query = AccessToken::query();
21
22 2
        if ($user->cant('viewAny', AccessToken::class)) {
23 1
            $query->where('user_id', $user->id);
24
        }
25
26 2
        if ($user->can('viewAny', AccessToken::class)) {
27 1
            $query->with('user');
28
        }
29
30 2
        $accessTokens = $query->orderBy('created_at', 'desc')->paginate(20);
31
32 2
        return AccessTokenResource::collection($accessTokens)->additional(['authorized_actions' => (new AccessToken)->authorizedActions()]);
33
    }
34
35 3
    public function show(Request $request, $id)
36
    {
37 3
        $accessToken = AccessToken::where('id', $id)->firstOrFail();
38
39 3
        $user = $request->user();
40
41 3
        if ($user->cant('view', $accessToken)) {
42 1
            abort(401);
43
        }
44
45 2
        if ($user->can('viewAny', AccessToken::class)) {
46 1
            $accessToken->load('user');
47
        }
48
49 2
        return new AccessTokenResource($accessToken);
50
    }
51
52 1
    public function create(Request $request)
53
    {
54 1
        $request->validate([
55 1
            'name' => ['required', 'string', 'max:255'],
56
            'permissions' => ['nullable', 'array'],
57
        ]);
58
59 1
        $user = $request->user();
60
61 1
        if ($user->cant('create', AccessToken::class)) {
62
            abort(401);
63
        }
64
65 1
        $permissions = $request->permissions ? array_intersect($user->apiPermissions(), $request->permissions) : null;
66
67 1
        $accessToken = $user->createToken($request->name, $permissions);
68
69 1
        return (new AccessTokenResource($accessToken))->additional(['message' => __('The access token has been created.')]);
70
    }
71
72 3
    public function update(Request $request, $id)
73
    {
74 3
        $request->validate([
75 3
            'name' => ['required', 'string', 'max:255'],
76
            'permissions' => ['nullable', 'array'],
77
        ]);
78
79 3
        $user = $request->user();
80
81 3
        $accessToken = AccessToken::where('id', $id)->firstOrFail();
82
83 3
        if ($user->cant('update', $accessToken)) {
84 1
            abort(401);
85
        }
86
87 2
        if ($request->permissions) {
88 2
            $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...
89
        }
90
91 2
        $permissions = $request->permissions ? array_intersect($user->apiPermissions(), $request->permissions) : null;
92
93 2
        $accessToken->update([
94 2
            'name' => $request->name,
95 2
            'permissions' => $permissions,
96
        ]);
97
98 2
        return (new AccessTokenResource($accessToken))->additional(['message' => __('The access token has been updated.')]);
99
    }
100
101 3
    public function delete(Request $request, $id)
102
    {
103 3
        $user = $request->user();
104
105 3
        $accessToken = AccessToken::where('id', $id)->firstOrFail();
106
107 3
        if ($user->cant('delete', $accessToken)) {
108 1
            abort(401);
109
        }
110
111 2
        $accessToken->delete();
112
113 2
        return ['message' => __('The access token has been deleted.')];
114
    }
115
}
116