From f15bf4dfe667945023bbc79d7c4a98033d2841ee Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Sun, 7 Sep 2025 10:13:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?RateLimiter=20=D0=B8=D0=B7=20ENV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SfeduSchedule/Program.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SfeduSchedule/Program.cs b/SfeduSchedule/Program.cs index 9dec7a1..c7fc75a 100644 --- a/SfeduSchedule/Program.cs +++ b/SfeduSchedule/Program.cs @@ -15,6 +15,9 @@ string? tgChatId = configuration["TG_CHAT_ID"]; string? tgToken = configuration["TG_TOKEN"]; string updateJwtCron = configuration["UPDATE_JWT_CRON"] ?? "0 0 4 ? * *"; +int permitLimit = int.TryParse(configuration["PERMIT_LIMIT"], out var parsedPermitLimit) ? parsedPermitLimit : 40; +int timeLimit = int.TryParse(configuration["TIME_LIMIT"], out var parsedTimeLimit) ? parsedTimeLimit : 10; + // создать папку data если не существует var dataDirectory = Path.Combine(AppContext.BaseDirectory, "data"); if (!Directory.Exists(dataDirectory)) @@ -82,14 +85,14 @@ builder.Services.AddRateLimiter(options => : (httpContext.Connection.RemoteIpAddress?.ToString() ?? "unknown"), factory: _ => new FixedWindowRateLimiterOptions { - PermitLimit = 40, - Window = TimeSpan.FromSeconds(10) + PermitLimit = permitLimit, + Window = TimeSpan.FromSeconds(timeLimit) })); options.OnRejected = async (context, cancellationToken) => { context.HttpContext.Response.StatusCode = StatusCodes.Status429TooManyRequests; - context.HttpContext.Response.Headers["Retry-After"] = "60"; + context.HttpContext.Response.Headers["Retry-After"] = timeLimit.ToString(); await context.HttpContext.Response.WriteAsync("Rate limit exceeded. Please try again later.", cancellationToken);