Rate limiting

This commit is contained in:
2026-09-09 17:20:11 +02:00
parent 69e683bcaf
commit e42849bed4
3 changed files with 19 additions and 1 deletions
+10
View File
@@ -3,8 +3,11 @@
namespace App\Providers; namespace App\Providers;
use Carbon\CarbonImmutable; use Carbon\CarbonImmutable;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Http\Request;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider class AppServiceProvider extends ServiceProvider
@@ -23,6 +26,13 @@ class AppServiceProvider extends ServiceProvider
public function boot(): void public function boot(): void
{ {
$this->configureDefaults(); $this->configureDefaults();
RateLimiter::for('training', function (Request $request) {
return [
Limit::perMinute(50),
Limit::perMinute(15)->by($request->ip()),
];
});
} }
/** /**
@@ -109,6 +109,12 @@ function startTraining() {
}) })
.then((response) => { .then((response) => {
if (!response.ok) { if (!response.ok) {
if (response.status === 429) {
alert('Trop de requêtes pour mon petit serveur. Veuillez réessayer dans une minute.');
} else {
alert('Erreur lors du lancement de l\'entraînement. Veuillez réessayer.');
}
throw new Error('Network response was not ok'); throw new Error('Network response was not ok');
} }
return response.json(); return response.json();
+2
View File
@@ -3,4 +3,6 @@
use App\Http\Controllers\PerceptronController; use App\Http\Controllers\PerceptronController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::middleware('throttle:training')->group(function () {
Route::post('perceptron/run', [PerceptronController::class, 'run'])->name('perceptron.run'); Route::post('perceptron/run', [PerceptronController::class, 'run'])->name('perceptron.run');
});