Skip to content

Commit fe523ff

Browse files
feature: add user activation endpoints (#86)
* feature: add user activation endpoints * styleci * add 403 docs --------- Co-authored-by: Crypta Eve <crypta@crypta.tech>
1 parent ccaa88f commit fe523ff

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

src/Http/Controllers/Api/v2/UserController.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public function getConfiguredScopes(): JsonResponse
166166
),
167167
new OA\Response(response: 400, description: 'Bad request'),
168168
new OA\Response(response: 401, description: 'Unauthorized'),
169+
new OA\Response(response: 403, description: 'Forbidden'),
169170
]
170171
)]
171172
public function postNewUser(NewUser $request): JsonResponse|UserResource
@@ -211,6 +212,7 @@ public function postNewUser(NewUser $request): JsonResponse|UserResource
211212
new OA\Response(response: 200, description: 'Successful operation'),
212213
new OA\Response(response: 400, description: 'Bad request'),
213214
new OA\Response(response: 401, description: 'Unauthorized'),
215+
new OA\Response(response: 403, description: 'Forbidden'),
214216
]
215217
)]
216218
public function deleteUser(int $user_id): JsonResponse
@@ -225,4 +227,74 @@ public function deleteUser(int $user_id): JsonResponse
225227

226228
return response()->json();
227229
}
230+
231+
#[OA\Post(
232+
path: '/api/v2/users/{user_id}/activate',
233+
description: 'Activates a user',
234+
summary: 'Activates a deactivated SeAT user. Returns successfully if already activated.',
235+
security: [
236+
[
237+
'ApiKeyAuth' => [],
238+
],
239+
],
240+
tags: [
241+
'Users',
242+
],
243+
parameters: [
244+
new OA\Parameter(name: 'user_id', description: 'A SeAT User ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
245+
],
246+
responses: [
247+
new OA\Response(response: 200, description: 'Successful operation'),
248+
new OA\Response(response: 400, description: 'Bad request'),
249+
new OA\Response(response: 401, description: 'Unauthorized'),
250+
new OA\Response(response: 403, description: 'Forbidden'),
251+
]
252+
)]
253+
public function postActivateUser(int $user_id): JsonResponse
254+
{
255+
$user = User::findOrFail($user_id);
256+
257+
if ($user->name == 'admin')
258+
return response()->json('You cannot modify this user.', 403);
259+
260+
$user->active = true;
261+
$user->save();
262+
263+
return response()->json();
264+
}
265+
266+
#[OA\Post(
267+
path: '/api/v2/users/{user_id}/deactivate',
268+
description: 'Deactivates a user',
269+
summary: 'Deactivates a SeAT user. Returns successfully if already deactivated.',
270+
security: [
271+
[
272+
'ApiKeyAuth' => [],
273+
],
274+
],
275+
tags: [
276+
'Users',
277+
],
278+
parameters: [
279+
new OA\Parameter(name: 'user_id', description: 'A SeAT User ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
280+
],
281+
responses: [
282+
new OA\Response(response: 200, description: 'Successful operation'),
283+
new OA\Response(response: 400, description: 'Bad request'),
284+
new OA\Response(response: 401, description: 'Unauthorized'),
285+
new OA\Response(response: 403, description: 'Forbidden'),
286+
]
287+
)]
288+
public function postDeactivateUser(int $user_id): JsonResponse
289+
{
290+
$user = User::findOrFail($user_id);
291+
292+
if ($user->name == 'admin')
293+
return response()->json('You cannot modify this user.', 403);
294+
295+
$user->active = false;
296+
$user->save();
297+
298+
return response()->json();
299+
}
228300
}

src/Http/routes.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@
6868
Route::get('/')->uses('UserController@getUsers');
6969
Route::get('/{user_id}')->uses('UserController@show')->where(['user_id' => '[0-9]+']);
7070

71+
Route::post('/{user_id}/activate')->uses('UserController@postActivateUser');
72+
Route::post('/{user_id}/deactivate')->uses('UserController@postDeactivateUser');
73+
7174
Route::get('/configured-scopes')->uses('UserController@getConfiguredScopes');
7275
});
7376

0 commit comments

Comments
 (0)