diff --git a/CHANGELOG.md b/CHANGELOG.md index c5cf2a4..0bde747 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ In Devlopment - Serve a `/robots.txt` file denying all robots - Log `User-Agent` and `X-Request-ID` headers - Rate limit incoming requests +- Handling of incoming requests now times out after 25 seconds v0.5.0 (2024-11-18) ------------------- diff --git a/Cargo.lock b/Cargo.lock index 458b656..d6410e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3338,6 +3338,7 @@ dependencies = [ "http 1.1.0", "http-body 1.0.1", "pin-project-lite", + "tokio", "tower-layer", "tower-service", "tracing", diff --git a/Cargo.toml b/Cargo.toml index d07b9f5..db60333 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,7 @@ thiserror = "2.0.11" time = { version = "0.3.37", features = ["formatting", "macros", "parsing", "serde"] } tokio = { version = "1.43.0", features = ["macros", "net", "rt-multi-thread", "time"] } tower = { version = "0.5.2", features = ["util"] } -tower-http = { version = "0.6.2", features = ["set-header", "trace"] } +tower-http = { version = "0.6.2", features = ["set-header", "timeout", "trace"] } tower_governor = { version = "0.6.0", features = ["tracing"] } tracing = "0.1.41" tracing-subscriber = { version = "0.3.19", features = ["json", "local-time", "time"] } diff --git a/src/main.rs b/src/main.rs index f08893f..712b598 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,7 +39,9 @@ use tower::service_fn; use tower_governor::{ governor::GovernorConfigBuilder, key_extractor::SmartIpKeyExtractor, GovernorLayer, }; -use tower_http::{set_header::response::SetResponseHeaderLayer, trace::TraceLayer}; +use tower_http::{ + set_header::response::SetResponseHeaderLayer, timeout::TimeoutLayer, trace::TraceLayer, +}; use tracing::Level; use tracing_subscriber::{filter::Targets, fmt::time::OffsetTime, prelude::*}; @@ -184,6 +186,7 @@ fn get_app(cfg: Config) -> anyhow::Result { ACCESS_CONTROL_ALLOW_ORIGIN, HeaderValue::from_static("*"), )) + .layer(TimeoutLayer::new(std::time::Duration::from_secs(25))) .layer(GovernorLayer { config: Arc::new( GovernorConfigBuilder::default()