Files
oauth/routes/api.php
Josep Piguillem c2b5291a74 Initial commit: OAuth IAM Laravel application
Laravel-based OAuth/IAM service with Passport, Vue 3 frontend, and
Docker Compose setup for local and production deployment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 01:02:41 +02:00

45 lines
2.5 KiB
PHP

<?php
use App\Http\Controllers\Api\AnalyticsController;
use App\Http\Controllers\Api\AppController;
use App\Http\Controllers\Api\AuthorizedAppController;
use App\Http\Controllers\Api\ClientController;
use App\Http\Controllers\Api\PersonalAccessTokenController;
use App\Http\Controllers\Api\UserController;
use Illuminate\Support\Facades\Route;
// Usuario del token actual (whoami) + roles.
Route::get('/user', [UserController::class, 'me'])->middleware('auth:api');
// Directorio de usuarios (admin) — self-service para uno mismo, permiso users.* para el resto.
// "/users/trashed" tiene que registrarse ANTES de la apiResource: si no, Laravel
// intenta bindear "trashed" como {user} de la ruta show y nunca llega acá.
Route::get('/users/trashed', [UserController::class, 'trashed']);
Route::get('/users/pending', [UserController::class, 'pending']);
Route::post('/users/{id}/restore', [UserController::class, 'restore'])->whereNumber('id');
Route::delete('/users/{id}/force', [UserController::class, 'forceDelete'])->whereNumber('id');
Route::apiResource('users', UserController::class);
Route::post('/users/{user}/approve', [UserController::class, 'approve']);
Route::get('/users/{user}/app-roles', [UserController::class, 'appRoles']);
Route::post('/users/{user}/app-roles', [UserController::class, 'assignAppRole']);
Route::delete('/users/{user}/app-roles/{clientId}/{role}', [UserController::class, 'revokeAppRole']);
// Apps registradas en el sistema (admin, para el selector de roles-por-app).
Route::get('/apps', [AppController::class, 'index']);
// Analíticas de uso: sesiones, logins por app, actividad reciente.
Route::get('/analytics/summary', [AnalyticsController::class, 'summary']);
// Cuenta propia: clientes OAuth, personal access tokens y apps autorizadas.
// Todo esto es lo mismo que ofrece la SPA Vue por sesión (routes/web.php), pero
// vía Bearer token — para que cualquier cliente (Angular, Flutter, etc.) pueda
// construir su propio panel sin depender de la sesión de Laravel.
Route::apiResource('clients', ClientController::class)->except(['show'])->names('api.clients');
Route::get('/personal-access-tokens', [PersonalAccessTokenController::class, 'index']);
Route::post('/personal-access-tokens', [PersonalAccessTokenController::class, 'store']);
Route::delete('/personal-access-tokens/{tokenId}', [PersonalAccessTokenController::class, 'destroy']);
Route::get('/authorized-apps', [AuthorizedAppController::class, 'index']);
Route::delete('/authorized-apps/{tokenId}', [AuthorizedAppController::class, 'destroy']);