diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/AnalyzeRulesFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/AnalyzeRulesFunction.cs index be545655..4c0e03c4 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/AnalyzeRulesFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/AnalyzeRulesFunction.cs @@ -56,7 +56,9 @@ namespace AutopilotMonitor.Functions.Functions return unauthorized; } - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { var badRequest = req.CreateResponse(HttpStatusCode.BadRequest); await badRequest.WriteAsJsonAsync(new { success = false, message = "Request body too large" }); @@ -92,7 +94,9 @@ namespace AutopilotMonitor.Functions.Functions return unauthorized; } - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues2) + && long.TryParse(clValues2.FirstOrDefault(), out var contentLength2) + && contentLength2 > 1_048_576) // 1 MB limit { var badRequest = req.CreateResponse(HttpStatusCode.BadRequest); await badRequest.WriteAsJsonAsync(new { success = false, message = "Request body too large" }); diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/GatherRulesFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/GatherRulesFunction.cs index 3badac54..287c0ca6 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/GatherRulesFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/GatherRulesFunction.cs @@ -56,7 +56,9 @@ namespace AutopilotMonitor.Functions.Functions return unauthorized; } - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { var badRequest = req.CreateResponse(HttpStatusCode.BadRequest); await badRequest.WriteAsJsonAsync(new { success = false, message = "Request body too large" }); @@ -92,7 +94,9 @@ namespace AutopilotMonitor.Functions.Functions return unauthorized; } - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues2) + && long.TryParse(clValues2.FirstOrDefault(), out var contentLength2) + && contentLength2 > 1_048_576) // 1 MB limit { var badRequest = req.CreateResponse(HttpStatusCode.BadRequest); await badRequest.WriteAsJsonAsync(new { success = false, message = "Request body too large" }); diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/IngestEventsFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/IngestEventsFunction.cs index 239e4a66..d88dd400 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/IngestEventsFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/IngestEventsFunction.cs @@ -68,7 +68,9 @@ namespace AutopilotMonitor.Functions.Functions { // Legacy format: standard JSON (backwards compatibility) _logger.LogDebug("Parsing legacy JSON request"); - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { return await CreateErrorResponse(req, HttpStatusCode.BadRequest, "Request body too large"); } diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/RegisterSessionFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/RegisterSessionFunction.cs index 291cdd1d..d2515748 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/RegisterSessionFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/RegisterSessionFunction.cs @@ -38,7 +38,9 @@ namespace AutopilotMonitor.Functions.Functions try { // Parse request - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { var errorResponse = await CreateErrorResponse(req, HttpStatusCode.BadRequest, "Request body too large"); return new RegisterSessionOutput { HttpResponse = errorResponse }; diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/SignalRAddToGroupFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/SignalRAddToGroupFunction.cs index 1babd057..b3094331 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/SignalRAddToGroupFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/SignalRAddToGroupFunction.cs @@ -38,7 +38,9 @@ namespace AutopilotMonitor.Functions.Functions } // Parse request - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { var errorResponse = req.CreateResponse(HttpStatusCode.BadRequest); await errorResponse.WriteAsJsonAsync(new { success = false, message = "Request body too large" }); diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/SignalRRemoveFromGroupFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/SignalRRemoveFromGroupFunction.cs index 09be71c4..19e3274c 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/SignalRRemoveFromGroupFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/SignalRRemoveFromGroupFunction.cs @@ -38,7 +38,9 @@ namespace AutopilotMonitor.Functions.Functions } // Parse request - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { var errorResponse = req.CreateResponse(HttpStatusCode.BadRequest); await errorResponse.WriteAsJsonAsync(new { success = false, message = "Request body too large" }); diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/UpdateAdminConfigurationFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/UpdateAdminConfigurationFunction.cs index 92dd4ee4..bfe1367c 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/UpdateAdminConfigurationFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/UpdateAdminConfigurationFunction.cs @@ -67,7 +67,9 @@ namespace AutopilotMonitor.Functions.Functions _logger.LogInformation($"UpdateAdminConfiguration by Galactic Admin user {userIdentifier}"); // Parse request body - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { var badRequest = req.CreateResponse(HttpStatusCode.BadRequest); await badRequest.WriteAsJsonAsync(new { success = false, message = "Request body too large" }); diff --git a/src/Backend/AutopilotMonitor.Functions/Functions/UpdateTenantConfigurationFunction.cs b/src/Backend/AutopilotMonitor.Functions/Functions/UpdateTenantConfigurationFunction.cs index b023c248..d1108e1b 100644 --- a/src/Backend/AutopilotMonitor.Functions/Functions/UpdateTenantConfigurationFunction.cs +++ b/src/Backend/AutopilotMonitor.Functions/Functions/UpdateTenantConfigurationFunction.cs @@ -65,7 +65,9 @@ namespace AutopilotMonitor.Functions.Functions _logger.LogInformation($"UpdateTenantConfiguration: {tenantId} by user {userIdentifier}"); // Parse request body - if (req.Body.Length > 1_048_576) // 1 MB limit + if (req.Headers.TryGetValues("Content-Length", out var clValues) + && long.TryParse(clValues.FirstOrDefault(), out var contentLength) + && contentLength > 1_048_576) // 1 MB limit { var badRequest = req.CreateResponse(HttpStatusCode.BadRequest); await badRequest.WriteAsJsonAsync(new { success = false, message = "Request body too large" });