mirror of
https://github.com/tiennm99/coolify.git
synced 2026-09-12 06:18:11 +00:00
Split V5 dashboard behavior into domain controllers and policies, add agent token rotation/revocation, status reconciliation jobs, ingress firewall syncing, and canvas connection APIs. Add migrations for V5 status tracking, server capabilities, resource connection aliases, and revoked agent tokens.
76 lines
2.5 KiB
PHP
76 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Providers;
|
|
|
|
use Illuminate\Cache\RateLimiting\Limit;
|
|
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\RateLimiter;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
class RouteServiceProvider extends ServiceProvider
|
|
{
|
|
/**
|
|
* The path to the "home" route for your application.
|
|
*
|
|
* Typically, users are redirected here after authentication.
|
|
*
|
|
* @var string
|
|
*/
|
|
public const HOME = '/';
|
|
|
|
/**
|
|
* Define your route model bindings, pattern filters, and other route configuration.
|
|
*/
|
|
public function boot(): void
|
|
{
|
|
$this->configureRateLimiting();
|
|
|
|
$this->routes(function () {
|
|
Route::middleware('api')
|
|
->prefix('api')
|
|
->group(base_path('routes/api.php'));
|
|
|
|
Route::prefix('webhooks')
|
|
->group(base_path('routes/webhooks.php'));
|
|
|
|
Route::middleware('v5.web')
|
|
->prefix('v5')
|
|
->as('v5.')
|
|
->group(base_path('routes/v5.php'));
|
|
|
|
Route::middleware('web')
|
|
->group(base_path('routes/web.php'));
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Configure the rate limiters for the application.
|
|
*/
|
|
protected function configureRateLimiting(): void
|
|
{
|
|
RateLimiter::for('api', function (Request $request) {
|
|
if ($request->path() === 'api/health') {
|
|
return Limit::perMinute(1000)->by($request->user()?->id ?: $request->ip());
|
|
}
|
|
|
|
return Limit::perMinute((int) config('api.rate_limit'))->by($request->user()?->id ?: $request->ip());
|
|
});
|
|
RateLimiter::for('5', function (Request $request) {
|
|
return Limit::perMinute(5)->by($request->user()?->id ?: $request->ip());
|
|
});
|
|
|
|
// v5 authenticated web endpoints run synchronous SSH/Flux work per
|
|
// request (connectivity checks, bootstrap, diagnostics). Throttle per
|
|
// user so a single member cannot pin FPM workers by hammering them,
|
|
// while leaving ample headroom for the canvas's 3s cluster polling.
|
|
RateLimiter::for('v5', function (Request $request) {
|
|
return Limit::perMinute(120)->by($request->user()?->id ?: $request->ip());
|
|
});
|
|
|
|
RateLimiter::for('feedback', function (Request $request) {
|
|
return Limit::perMinute(3)->by($request->user()?->id ?: $request->ip());
|
|
});
|
|
}
|
|
}
|