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.
This commit is contained in:
Jon Seager 2026-02-22 10:03:43 +00:00
parent 488e7f9d74
commit dfb7e86f6d
No known key found for this signature in database

View file

@ -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"),