You've already forked isop-mirror
feat: implement External system (API) controller with key management
This commit is contained in:
49
backend/app/Http/Controllers/ExternalApiController.php
Normal file
49
backend/app/Http/Controllers/ExternalApiController.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Sanctum\Sanctum;
|
||||
|
||||
class ExternalApiController extends Controller
|
||||
{
|
||||
public function all_keys(Request $request)
|
||||
{
|
||||
$tokens = Sanctum::$personalAccessTokenModel::with('tokenable')->get();
|
||||
|
||||
$tokens = $tokens->map(fn($token) => [
|
||||
"id" => $token->id,
|
||||
"name" => $token->name,
|
||||
"created_at" => $token->created_at,
|
||||
"last_used_at" => $token->last_used_at,
|
||||
"owner" => User::find($token->tokenable_id)->name,
|
||||
]);
|
||||
|
||||
return response()->json($tokens);
|
||||
}
|
||||
|
||||
public function create_key(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|min:3|max:64',
|
||||
]);
|
||||
|
||||
$token = $request->user()->createToken($request->name)->plainTextToken;
|
||||
|
||||
return response()->json([
|
||||
"key" => $token,
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy_key(Request $request, int $id)
|
||||
{
|
||||
$request->user()->tokens()->where('id', $id)->delete();
|
||||
return response()->noContent();
|
||||
}
|
||||
|
||||
public function update_internship_status(int $id)
|
||||
{
|
||||
// TODO: Implement in SCRUM-65
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
use App\Http\Controllers\Auth\RegisteredUserController;
|
||||
use App\Http\Controllers\CompanyController;
|
||||
use App\Http\Controllers\ExternalApiController;
|
||||
use App\Http\Controllers\InternshipController;
|
||||
use App\Http\Controllers\StudentDataController;
|
||||
use App\Http\Controllers\InternshipStatusDataController;
|
||||
@@ -43,8 +44,7 @@ Route::prefix('/internships')->group(function () {
|
||||
Route::get("/", [InternshipController::class, 'all'])->name("api.internships");
|
||||
Route::get("/my", [InternshipController::class, 'all_my'])->name("api.internships.my");
|
||||
|
||||
//Route::middleware("auth:sanctum")->group(function () {
|
||||
Route::prefix('/{id}')->group(function () {
|
||||
Route::prefix('/{id}')->middleware("auth:sanctum")->group(function () {
|
||||
Route::get("/", [InternshipController::class, 'get'])->name("api.internships.get");
|
||||
Route::put("/status", [InternshipStatusDataController::class, 'update'])->name("api.internships.status.update");
|
||||
Route::get("/statuses", [InternshipStatusDataController::class, 'get'])->name("api.internships.get");
|
||||
@@ -57,7 +57,6 @@ Route::prefix('/internships')->group(function () {
|
||||
});
|
||||
|
||||
Route::put("/new", [InternshipController::class, 'store'])->name("api.internships.create");
|
||||
//});
|
||||
});
|
||||
|
||||
Route::prefix('/companies')->middleware("auth:sanctum")->group(function () {
|
||||
@@ -65,4 +64,19 @@ Route::prefix('/companies')->middleware("auth:sanctum")->group(function () {
|
||||
Route::get("/{id}", [CompanyController::class, 'get']);
|
||||
Route::post("/{id}", [CompanyController::class, 'update_all']);
|
||||
Route::delete("/{id}", [CompanyController::class, 'delete']);
|
||||
});
|
||||
|
||||
Route::prefix('/external')->middleware("auth:sanctum")->group(function () {
|
||||
Route::prefix('/keys')->group(function () {
|
||||
Route::get("/", [ExternalApiController::class, 'all_keys'])->name("api.external.keys.create");
|
||||
Route::put("/", [ExternalApiController::class, 'create_key'])->name("api.external.keys.list");
|
||||
Route::delete("/{id}", [ExternalApiController::class, 'destroy_key'])->name("api.external.keys.delete");
|
||||
});
|
||||
|
||||
|
||||
Route::prefix('/internships')->group(function () {
|
||||
Route::prefix('/{id}')->middleware("auth:sanctum")->group(function () {
|
||||
Route::put("/status", [ExternalApiController::class, 'update_internship_status'])->name("api.external.internships.status.update");
|
||||
});
|
||||
});
|
||||
});
|
||||
11
frontend/app/types/api_keys.ts
Normal file
11
frontend/app/types/api_keys.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
export type ApiKey = {
|
||||
id: number,
|
||||
name: string,
|
||||
created_at: string,
|
||||
last_used_at: string,
|
||||
owner: string,
|
||||
};
|
||||
|
||||
export type NewApiKey = {
|
||||
key: string,
|
||||
};
|
||||
Reference in New Issue
Block a user