name}"; } /** * Returns a middleware that will throttle the specific resource by server. This * throttle applies to any user making changes to that resource on the specific * server, it is NOT per-user. */ public function middleware(): string { return ThrottleRequests::using($this->throttleKey()); } public function limit(): Limit { return match ($this) { self::Websocket => Limit::perMinute(5), self::BackupRestore => Limit::perMinutes(15, 3), self::DatabaseCreate => Limit::perMinute(2), self::SubuserCreate => Limit::perMinutes(15, 10), self::FilePull => Limit::perMinutes(10, 5), default => Limit::perMinute(2), }; } public static function boot(): void { foreach (self::cases() as $case) { RateLimiter::for($case->throttleKey(), function (Request $request) use ($case) { Assert::isInstanceOf($server = $request->route()->parameter('server'), Server::class); return $case->limit()->by($server->uuid); }); } } }