[backend/api] Limit follow list imports to twice every 30 mins
This commit is contained in:
parent
95ae04e4af
commit
71a12261a4
2 changed files with 11 additions and 0 deletions
|
@ -86,6 +86,7 @@ public class SettingsController(DatabaseContext db, ImportExportService importEx
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("import/following")]
|
[HttpPost("import/following")]
|
||||||
|
[EnableRateLimiting("imports")]
|
||||||
[ProducesResults(HttpStatusCode.Accepted)]
|
[ProducesResults(HttpStatusCode.Accepted)]
|
||||||
public async Task<AcceptedResult> ImportFollowing(IFormFile file)
|
public async Task<AcceptedResult> ImportFollowing(IFormFile file)
|
||||||
{
|
{
|
||||||
|
|
|
@ -292,10 +292,20 @@ public static class ServiceExtensions
|
||||||
QueueLimit = 0
|
QueueLimit = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var imports = new SlidingWindowRateLimiterOptions
|
||||||
|
{
|
||||||
|
PermitLimit = 2,
|
||||||
|
SegmentsPerWindow = 30,
|
||||||
|
Window = TimeSpan.FromMinutes(30),
|
||||||
|
QueueProcessingOrder = QueueProcessingOrder.OldestFirst,
|
||||||
|
QueueLimit = 0
|
||||||
|
};
|
||||||
|
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
options.AddPolicy("sliding", ctx => RateLimitPartition.GetSlidingWindowLimiter(ctx.GetRateLimitPartition(false),_ => sliding));
|
options.AddPolicy("sliding", ctx => RateLimitPartition.GetSlidingWindowLimiter(ctx.GetRateLimitPartition(false),_ => sliding));
|
||||||
options.AddPolicy("auth", ctx => RateLimitPartition.GetSlidingWindowLimiter(ctx.GetRateLimitPartition(false), _ => auth));
|
options.AddPolicy("auth", ctx => RateLimitPartition.GetSlidingWindowLimiter(ctx.GetRateLimitPartition(false), _ => auth));
|
||||||
options.AddPolicy("strict", ctx => RateLimitPartition.GetSlidingWindowLimiter(ctx.GetRateLimitPartition(true), _ => strict));
|
options.AddPolicy("strict", ctx => RateLimitPartition.GetSlidingWindowLimiter(ctx.GetRateLimitPartition(true), _ => strict));
|
||||||
|
options.AddPolicy("imports", ctx => RateLimitPartition.GetSlidingWindowLimiter(ctx.GetRateLimitPartition(true), _ => imports));
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
|
||||||
options.OnRejected = async (context, token) =>
|
options.OnRejected = async (context, token) =>
|
||||||
|
|
Loading…
Add table
Reference in a new issue