From d9a7bbbccd31f7ecc0dbb9bd2feb469aaff588a8 Mon Sep 17 00:00:00 2001 From: b1ek Date: Tue, 25 Feb 2025 19:25:17 +1000 Subject: [PATCH] parse the x-forwarded-for more carefully --- src/main.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index bc8b6bf..d2938e3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,18 +14,21 @@ impl ServiceTrait> for Service { type Future = Pin> + Send>>; fn call(&self, req: Request) -> Self::Future { - let mut remote_ip = self.remote_ip; + let mut remote_ip = self.remote_ip.map(|x| x.ip()); if let Some(ip) = req.headers().get("X-Forwarded-For") { if let Ok(str_ip) = ip.to_str() { if let Ok(ip) = str_ip.parse::() { + remote_ip = Some(ip.ip()); + } + if let Ok(ip) = str_ip.parse::() { remote_ip = Some(ip); } } } - + if let Some(ip) = remote_ip { - let mut res = Response::new(ip.ip().to_string()); + let mut res = Response::new(ip.to_string()); res.headers_mut().append("Content-Type", HeaderValue::from_static("text/plain")); Box::pin(async { Ok(res) }) } else {