From 94d70bec6962046377519521bd53dfcac37e3c3b Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Sat, 4 Feb 2023 09:49:56 +0000 Subject: generic_server.rs: Added support for logging X-Forwarded-For header. Fixes: #460 --- src/api/generic_server.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/api/generic_server.rs') diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs index 62fe4e5a..aa90868a 100644 --- a/src/api/generic_server.rs +++ b/src/api/generic_server.rs @@ -125,7 +125,26 @@ impl ApiServer { addr: SocketAddr, ) -> Result, GarageError> { let uri = req.uri().clone(); - info!("{} {} {}", addr, req.method(), uri); + + let has_forwarded_for_header = req.headers().contains_key("x-forwarded-for"); + if has_forwarded_for_header { + let forwarded_for_ip_addr = &req + .headers() + .get("x-forwarded-for") + .expect("Could not parse X-Forwarded-For header") + .to_str() + .unwrap_or_default(); + + info!( + "{} (via {}) {} {}", + forwarded_for_ip_addr, + addr, + req.method(), + uri + ); + } else { + info!("{} {} {}", addr, req.method(), uri); + } debug!("{:?}", req); let tracer = opentelemetry::global::tracer("garage"); -- cgit v1.2.3 From e4e5196066a75ed9327a62d8082decb1e0c381e7 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Thu, 9 Feb 2023 13:49:43 +0000 Subject: api/generic_server.rs: Use new handle_forwarded_for_headers() function. --- src/api/generic_server.rs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'src/api/generic_server.rs') diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs index aa90868a..d0354d28 100644 --- a/src/api/generic_server.rs +++ b/src/api/generic_server.rs @@ -19,6 +19,7 @@ use opentelemetry::{ }; use garage_util::error::Error as GarageError; +use garage_util::forwarded_headers; use garage_util::metrics::{gen_trace_id, RecordDuration}; pub(crate) trait ApiEndpoint: Send + Sync + 'static { @@ -126,15 +127,9 @@ impl ApiServer { ) -> Result, GarageError> { let uri = req.uri().clone(); - let has_forwarded_for_header = req.headers().contains_key("x-forwarded-for"); - if has_forwarded_for_header { - let forwarded_for_ip_addr = &req - .headers() - .get("x-forwarded-for") - .expect("Could not parse X-Forwarded-For header") - .to_str() - .unwrap_or_default(); - + if let Ok(forwarded_for_ip_addr) = + forwarded_headers::handle_forwarded_for_headers(&req.headers()) + { info!( "{} (via {}) {} {}", forwarded_for_ip_addr, -- cgit v1.2.3