diff --git a/backend/app/Http/Controllers/ExternalApiController.php b/backend/app/Http/Controllers/ExternalApiController.php new file mode 100644 index 0000000..e6ebc9a --- /dev/null +++ b/backend/app/Http/Controllers/ExternalApiController.php @@ -0,0 +1,49 @@ +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 + } +} diff --git a/backend/routes/api.php b/backend/routes/api.php index a21ab05..cc3c6ab 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -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"); + }); + }); }); \ No newline at end of file diff --git a/frontend/app/types/api_keys.ts b/frontend/app/types/api_keys.ts new file mode 100644 index 0000000..a9e1a87 --- /dev/null +++ b/frontend/app/types/api_keys.ts @@ -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, +}; \ No newline at end of file