From fe9e921d73eed64260fe17985a3e5f4d6cae2235 Mon Sep 17 00:00:00 2001 From: Azmog <80716388+AzmogEx@users.noreply.github.com> Date: Fri, 19 Jun 2026 10:47:37 +0200 Subject: [PATCH] fix(backend): durcissements (throttle register, garde auto-suppression admin, null-check saisie) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - throttle:10,1 sur l'inscription (anti-spam de comptes) - un admin ne peut plus désactiver/supprimer son propre compte (anti lock-out) - update/destroy saisie : abort 404 propre si l'utilisateur n'a pas de tracker Tests 15/15, Pint pass. --- .../Http/Controllers/Admin/AdminUtilisateurController.php | 8 ++++++++ backend/app/Http/Controllers/SaisieTrackerController.php | 8 ++++++-- backend/routes/api.php | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/backend/app/Http/Controllers/Admin/AdminUtilisateurController.php b/backend/app/Http/Controllers/Admin/AdminUtilisateurController.php index 0f4c857..c3966dd 100644 --- a/backend/app/Http/Controllers/Admin/AdminUtilisateurController.php +++ b/backend/app/Http/Controllers/Admin/AdminUtilisateurController.php @@ -86,6 +86,10 @@ class AdminUtilisateurController extends Controller public function toggleActive(int $id): JsonResponse { + if (auth()->id() === $id) { + return response()->json(['message' => 'Vous ne pouvez pas désactiver votre propre compte.'], 422); + } + $utilisateur = Utilisateur::findOrFail($id); $utilisateur->update(['est_actif' => ! $utilisateur->est_actif]); @@ -97,6 +101,10 @@ class AdminUtilisateurController extends Controller public function destroy(int $id): JsonResponse { + if (auth()->id() === $id) { + return response()->json(['message' => 'Vous ne pouvez pas supprimer votre propre compte administrateur.'], 422); + } + $utilisateur = Utilisateur::findOrFail($id); $utilisateur->delete(); diff --git a/backend/app/Http/Controllers/SaisieTrackerController.php b/backend/app/Http/Controllers/SaisieTrackerController.php index c8b26ee..b79a0a5 100644 --- a/backend/app/Http/Controllers/SaisieTrackerController.php +++ b/backend/app/Http/Controllers/SaisieTrackerController.php @@ -53,7 +53,9 @@ class SaisieTrackerController extends Controller public function update(StoreSaisieRequest $request, int $id): JsonResponse { - $saisie = auth()->user()->tracker->saisies()->findOrFail($id); + $tracker = auth()->user()->tracker; + abort_unless($tracker, 404, 'Aucun tracker trouvé.'); + $saisie = $tracker->saisies()->findOrFail($id); $saisie->update($request->validated()); $saisie->load('emotion'); @@ -65,7 +67,9 @@ class SaisieTrackerController extends Controller public function destroy(int $id): JsonResponse { - $saisie = auth()->user()->tracker->saisies()->findOrFail($id); + $tracker = auth()->user()->tracker; + abort_unless($tracker, 404, 'Aucun tracker trouvé.'); + $saisie = $tracker->saisies()->findOrFail($id); $saisie->delete(); return response()->json([ diff --git a/backend/routes/api.php b/backend/routes/api.php index 0da937f..291c8d1 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -20,7 +20,8 @@ Route::prefix('v1')->group(function () { // ── Auth (public) ────────────────────────────────────── Route::prefix('auth')->group(function () { - Route::post('register', [AuthController::class, 'register']); + Route::post('register', [AuthController::class, 'register']) + ->middleware('throttle:10,1'); Route::post('login', [AuthController::class, 'login']) ->middleware('throttle:5,1');