diff --git a/Cargo.lock b/Cargo.lock index f6d6619..c93d59c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,6 +108,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "2.11.0" @@ -520,6 +526,7 @@ dependencies = [ "log", "pretty_env_logger", "tokio", + "tower-http", ] [[package]] @@ -898,6 +905,22 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "base64", + "bitflags", + "bytes", + "http", + "mime", + "pin-project-lite", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" diff --git a/mdf-bouncer/Cargo.toml b/mdf-bouncer/Cargo.toml index 8edf124..5a14993 100644 --- a/mdf-bouncer/Cargo.toml +++ b/mdf-bouncer/Cargo.toml @@ -8,3 +8,4 @@ axum = "*" tokio = { version = "*", features = ["full"] } log = "0.4" pretty_env_logger = "0.4" +tower-http = { version = "*", features = ["auth"] } diff --git a/mdf-bouncer/src/main.rs b/mdf-bouncer/src/main.rs index 6c550f8..edc1b7c 100644 --- a/mdf-bouncer/src/main.rs +++ b/mdf-bouncer/src/main.rs @@ -5,8 +5,6 @@ use log::info; use tokio::fs; use std::path::PathBuf; -const MAXIMUM_PACKET_SIZE: usize = (2 << 20) * 10; - #[derive(Clone)] struct AppState { root: PathBuf, @@ -25,14 +23,17 @@ async fn main() -> io::Result<()> { port_str.parse::().expect("PORT is malformed") } else { 3236 }; + let maximum_packet_size: usize = if let Ok(port_str) = var("MDFBOUNCER_MAXIMUM_PACKET_SIZE") { + port_str.parse::().expect("MDFBOUNCER_MAXIMUM_PACKET_SIZE is malformed") + } else { (2 << 20) * 10 }; + let state = Arc::new(AppState { root: PathBuf::from(target_path) }); let app = Router::new() .route("/{*key}", put(put_file)) .route("/{*key}", delete(delete_file)) .with_state(state) - .layer(DefaultBodyLimit::max(MAXIMUM_PACKET_SIZE)); - + .layer(DefaultBodyLimit::max(maximum_packet_size)); let listener = tokio::net::TcpListener::bind(("localhost", port)) .await