Add fixed-window rate limiting to Lactose with 6 configurable buckets: - Global (100 req/60s) for all generic calls - Auth (10 req/60s) strict anti-brute-force - MediaOriginal (50 req/60s) for full-size media - MediaThumb (200 req/60s) for thumbnails - MediaPreview (200 req/60s) for previews - Jobs (30 req/10s) quick refresh for long-polling All buckets configurable via appsettings.json RateLimiting section. Rejected requests return HTTP 429 with JSON body and Retry-After header.
18 lines
566 B
C#
18 lines
566 B
C#
using Microsoft.Extensions.Options;
|
|
|
|
namespace Lactose.Configuration;
|
|
|
|
/// <summary>
|
|
/// Configures <see cref="RateLimitBucketOptions"/> from the application configuration.
|
|
/// </summary>
|
|
public class RateLimitBucketOptionsProvider(IConfiguration configuration) : IConfigureOptions<RateLimitBucketOptions> {
|
|
/// <inheritdoc />
|
|
public void Configure(RateLimitBucketOptions options) {
|
|
var section = configuration.GetSection(RateLimitBucketOptions.SectionName);
|
|
if (!section.Exists())
|
|
return;
|
|
|
|
section.Bind(options);
|
|
}
|
|
}
|