From bcc8377beca2a82b08e4ef58ff966db5bcc74936 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Thu, 27 Feb 2025 01:56:18 +0100 Subject: [PATCH] [backend/api] Fix emoji import request size limiter not being disabled --- .../Attributes/DisableRequestSizeLimit.cs | 28 +++++++++++++++++++ .../Controllers/Web/EmojiController.cs | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 Iceshrimp.Backend/Controllers/Shared/Attributes/DisableRequestSizeLimit.cs diff --git a/Iceshrimp.Backend/Controllers/Shared/Attributes/DisableRequestSizeLimit.cs b/Iceshrimp.Backend/Controllers/Shared/Attributes/DisableRequestSizeLimit.cs new file mode 100644 index 00000000..4b776c4f --- /dev/null +++ b/Iceshrimp.Backend/Controllers/Shared/Attributes/DisableRequestSizeLimit.cs @@ -0,0 +1,28 @@ +using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Http.Metadata; +using Microsoft.AspNetCore.Mvc.Filters; + +namespace Iceshrimp.Backend.Controllers.Shared.Attributes; + +public class NoRequestSizeLimitAttribute : Attribute, IFormOptionsMetadata, IResourceFilter +{ + public void OnResourceExecuting(ResourceExecutingContext context) + { + var feature = context.HttpContext.Features.Get() ?? + throw new Exception("Failed to get IHttpMaxRequestBodySizeFeature"); + feature.MaxRequestBodySize = long.MaxValue; + } + + public void OnResourceExecuted(ResourceExecutedContext context) { } + + public bool? BufferBody => null; + public int? MemoryBufferThreshold => null; + public long? BufferBodyLengthLimit => long.MaxValue; + public int? ValueCountLimit => null; + public int? KeyLengthLimit => null; + public int? ValueLengthLimit => null; + public int? MultipartBoundaryLengthLimit => null; + public int? MultipartHeadersCountLimit => null; + public int? MultipartHeadersLengthLimit => null; + public long? MultipartBodyLengthLimit => long.MaxValue; +} \ No newline at end of file diff --git a/Iceshrimp.Backend/Controllers/Web/EmojiController.cs b/Iceshrimp.Backend/Controllers/Web/EmojiController.cs index 17d628b9..dd377c4b 100644 --- a/Iceshrimp.Backend/Controllers/Web/EmojiController.cs +++ b/Iceshrimp.Backend/Controllers/Web/EmojiController.cs @@ -187,7 +187,7 @@ public class EmojiController( [HttpPost("import")] [Authorize("role:moderator")] - [DisableRequestSizeLimit] + [NoRequestSizeLimit] [ProducesResults(HttpStatusCode.Accepted)] public async Task ImportEmoji(IFormFile file) {