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\Auth\RegisteredUserController;
|
||||||
use App\Http\Controllers\CompanyController;
|
use App\Http\Controllers\CompanyController;
|
||||||
|
use App\Http\Controllers\ExternalApiController;
|
||||||
use App\Http\Controllers\InternshipController;
|
use App\Http\Controllers\InternshipController;
|
||||||
use App\Http\Controllers\StudentDataController;
|
use App\Http\Controllers\StudentDataController;
|
||||||
use App\Http\Controllers\InternshipStatusDataController;
|
use App\Http\Controllers\InternshipStatusDataController;
|
||||||
@@ -43,8 +44,7 @@ Route::prefix('/internships')->group(function () {
|
|||||||
Route::get("/", [InternshipController::class, 'all'])->name("api.internships");
|
Route::get("/", [InternshipController::class, 'all'])->name("api.internships");
|
||||||
Route::get("/my", [InternshipController::class, 'all_my'])->name("api.internships.my");
|
Route::get("/my", [InternshipController::class, 'all_my'])->name("api.internships.my");
|
||||||
|
|
||||||
//Route::middleware("auth:sanctum")->group(function () {
|
Route::prefix('/{id}')->middleware("auth:sanctum")->group(function () {
|
||||||
Route::prefix('/{id}')->group(function () {
|
|
||||||
Route::get("/", [InternshipController::class, 'get'])->name("api.internships.get");
|
Route::get("/", [InternshipController::class, 'get'])->name("api.internships.get");
|
||||||
Route::put("/status", [InternshipStatusDataController::class, 'update'])->name("api.internships.status.update");
|
Route::put("/status", [InternshipStatusDataController::class, 'update'])->name("api.internships.status.update");
|
||||||
Route::get("/statuses", [InternshipStatusDataController::class, 'get'])->name("api.internships.get");
|
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::put("/new", [InternshipController::class, 'store'])->name("api.internships.create");
|
||||||
//});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::prefix('/companies')->middleware("auth:sanctum")->group(function () {
|
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::get("/{id}", [CompanyController::class, 'get']);
|
||||||
Route::post("/{id}", [CompanyController::class, 'update_all']);
|
Route::post("/{id}", [CompanyController::class, 'update_all']);
|
||||||
Route::delete("/{id}", [CompanyController::class, 'delete']);
|
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