Skip to content

Commit

Permalink
feature: add user activation endpoints (#86)
Browse files Browse the repository at this point in the history
* feature: add user activation endpoints

* styleci

* add 403 docs

---------

Co-authored-by: Crypta Eve <[email protected]>
  • Loading branch information
recursivetree and Crypta-Eve authored Feb 21, 2025
1 parent ccaa88f commit fe523ff
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 0 deletions.
72 changes: 72 additions & 0 deletions src/Http/Controllers/Api/v2/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ public function getConfiguredScopes(): JsonResponse
),
new OA\Response(response: 400, description: 'Bad request'),
new OA\Response(response: 401, description: 'Unauthorized'),
new OA\Response(response: 403, description: 'Forbidden'),
]
)]
public function postNewUser(NewUser $request): JsonResponse|UserResource
Expand Down Expand Up @@ -211,6 +212,7 @@ public function postNewUser(NewUser $request): JsonResponse|UserResource
new OA\Response(response: 200, description: 'Successful operation'),
new OA\Response(response: 400, description: 'Bad request'),
new OA\Response(response: 401, description: 'Unauthorized'),
new OA\Response(response: 403, description: 'Forbidden'),
]
)]
public function deleteUser(int $user_id): JsonResponse
Expand All @@ -225,4 +227,74 @@ public function deleteUser(int $user_id): JsonResponse

return response()->json();
}

#[OA\Post(
path: '/api/v2/users/{user_id}/activate',
description: 'Activates a user',
summary: 'Activates a deactivated SeAT user. Returns successfully if already activated.',
security: [
[
'ApiKeyAuth' => [],
],
],
tags: [
'Users',
],
parameters: [
new OA\Parameter(name: 'user_id', description: 'A SeAT User ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
],
responses: [
new OA\Response(response: 200, description: 'Successful operation'),
new OA\Response(response: 400, description: 'Bad request'),
new OA\Response(response: 401, description: 'Unauthorized'),
new OA\Response(response: 403, description: 'Forbidden'),
]
)]
public function postActivateUser(int $user_id): JsonResponse
{
$user = User::findOrFail($user_id);

if ($user->name == 'admin')
return response()->json('You cannot modify this user.', 403);

$user->active = true;
$user->save();

return response()->json();
}

#[OA\Post(
path: '/api/v2/users/{user_id}/deactivate',
description: 'Deactivates a user',
summary: 'Deactivates a SeAT user. Returns successfully if already deactivated.',
security: [
[
'ApiKeyAuth' => [],
],
],
tags: [
'Users',
],
parameters: [
new OA\Parameter(name: 'user_id', description: 'A SeAT User ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
],
responses: [
new OA\Response(response: 200, description: 'Successful operation'),
new OA\Response(response: 400, description: 'Bad request'),
new OA\Response(response: 401, description: 'Unauthorized'),
new OA\Response(response: 403, description: 'Forbidden'),
]
)]
public function postDeactivateUser(int $user_id): JsonResponse
{
$user = User::findOrFail($user_id);

if ($user->name == 'admin')
return response()->json('You cannot modify this user.', 403);

$user->active = false;
$user->save();

return response()->json();
}
}
3 changes: 3 additions & 0 deletions src/Http/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@
Route::get('/')->uses('UserController@getUsers');
Route::get('/{user_id}')->uses('UserController@show')->where(['user_id' => '[0-9]+']);

Route::post('/{user_id}/activate')->uses('UserController@postActivateUser');
Route::post('/{user_id}/deactivate')->uses('UserController@postDeactivateUser');

Route::get('/configured-scopes')->uses('UserController@getConfiguredScopes');
});

Expand Down

0 comments on commit fe523ff

Please sign in to comment.