fix(backend): durcissements (throttle register, garde auto-suppression admin, null-check saisie)

- 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.
This commit is contained in:
Azmog
2026-06-19 10:47:37 +02:00
parent ae9395a831
commit fe9e921d73
3 changed files with 16 additions and 3 deletions
@@ -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();
@@ -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([
+2 -1
View File
@@ -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');