From dfb7e86f6d5e12ed1055123c030c0c4aafa5362c Mon Sep 17 00:00:00 2001 From: Jon Seager Date: Sun, 22 Feb 2026 10:03:43 +0000 Subject: [PATCH] fix: use Axum DefaultBodyLimit so per-route overrides work Replace tower-http RequestBodyLimitLayer with Axum's DefaultBodyLimit for the global 5 MB request body cap. RequestBodyLimitLayer enforced a hard limit that prevented per-route DefaultBodyLimit overrides (backup restore at 50 MB, scan/image at 10 MB) from taking effect, causing HTTP 413 on backup restore. --- src/application/routes/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/application/routes/mod.rs b/src/application/routes/mod.rs index c8c1076..8bda84d 100644 --- a/src/application/routes/mod.rs +++ b/src/application/routes/mod.rs @@ -5,12 +5,12 @@ pub mod support; pub(crate) use app::auth::is_authenticated; use askama::Template; +use axum::extract::DefaultBodyLimit; use axum::http::{HeaderValue, StatusCode}; use axum::response::Html; use tower::ServiceBuilder; use tower_cookies::CookieManagerLayer; use tower_http::compression::CompressionLayer; -use tower_http::limit::RequestBodyLimitLayer; use tower_http::set_header::SetResponseHeaderLayer; use tower_http::trace::{DefaultMakeSpan, DefaultOnResponse, TraceLayer}; use tracing::Level; @@ -36,7 +36,7 @@ pub fn app_router(state: AppState) -> axum::Router { .on_response(DefaultOnResponse::new().level(Level::INFO)), ) .layer(CookieManagerLayer::new()) - .layer(RequestBodyLimitLayer::new(BODY_LIMIT_BYTES)) + .layer(DefaultBodyLimit::max(BODY_LIMIT_BYTES)) .layer(SetResponseHeaderLayer::overriding( axum::http::header::X_CONTENT_TYPE_OPTIONS, HeaderValue::from_static("nosniff"),