diff --git a/server/core/src/https/mod.rs b/server/core/src/https/mod.rs index 956de71a0..362c9b026 100644 --- a/server/core/src/https/mod.rs +++ b/server/core/src/https/mod.rs @@ -186,12 +186,12 @@ impl RequestExtensions for tide::Request { /// Returns the remote address of the client, based on if you've got trust_x_forward_for set in config. fn get_remote_addr(&self) -> Option { if self.state().trust_x_forward_for { - // split the socket address off if we've got one, then parse it as an `IpAddr` // xff headers don't have a port, but if we're going direct you might get one - let res = self - .remote() - .map(|addr| addr.split(':').next().unwrap_or(addr)) - .and_then(|ip| ip.parse::().ok()); + let res = self.remote().and_then(|ip| { + ip.parse::() + .ok() + .or_else(|| ip.parse::().map(|s_ad| s_ad.ip()).ok()) + }); debug!("Trusting XFF, using remote src_ip={:?}", res); res } else {