v0.34.0_11
This commit is contained in:
1 parent
dd2502dd11
commit
943d51b528
4 files changed
+142
-33
No files matched your search
+42
-28
@@ -268,36 +268,50 @@ impl Compiled {
|
||||
} else {
|
||||
String::new()
|
||||
};
|
||||
let peer_text = cached.is_none().then(|| peer_ip.to_string());
|
||||
let ipv6_node = (cached.is_none() && peer_ip.is_ipv6()).then(|| node(peer_ip));
|
||||
let peer_header = if let Some(cached) = cached {
|
||||
cached.peer_header.clone()
|
||||
// Repeated HTTP/1.1 requests generally share Host and TLS state.
|
||||
// Cache only the untrusted-peer metadata for this accepted socket;
|
||||
// X-Forwarded-Uri, original URL and all trust decisions remain per-request.
|
||||
let target_header: HeaderValue = target.parse()?;
|
||||
let mut values = if let Some(values) =
|
||||
cached.and_then(|peer| peer.cached_untrusted(authority, tls))
|
||||
{
|
||||
values
|
||||
} else {
|
||||
HeaderValue::from_str(peer_text.as_deref().unwrap_or(""))?
|
||||
let peer_text = cached.is_none().then(|| peer_ip.to_string());
|
||||
let ipv6_node = (cached.is_none() && peer_ip.is_ipv6()).then(|| node(peer_ip));
|
||||
let peer_header = if let Some(cached) = cached {
|
||||
cached.peer_header.clone()
|
||||
} else {
|
||||
HeaderValue::from_str(peer_text.as_deref().unwrap_or(""))?
|
||||
};
|
||||
let by_text = cached.is_none().then(|| node(canonical(local.ip())));
|
||||
let peer_node = cached.map_or_else(
|
||||
|| if peer_ip.is_ipv4() { peer_text.as_deref().unwrap_or("") }
|
||||
else { ipv6_node.as_deref().unwrap_or("") },
|
||||
|cached| cached.peer_node.as_str(),
|
||||
);
|
||||
let by_node = cached.map_or_else(|| by_text.as_deref().unwrap_or(""),
|
||||
|cached| cached.by_node.as_str());
|
||||
let forwarded = format!(
|
||||
"for={peer_node};by={by_node};proto={scheme};host=\"{authority_text}\""
|
||||
);
|
||||
let mut values = HeaderMap::with_capacity(7);
|
||||
values.insert("forwarded", forwarded.parse()?);
|
||||
values.insert("x-forwarded-for", peer_header.clone());
|
||||
values.insert("x-real-ip", peer_header);
|
||||
values.insert("x-forwarded-host", authority.clone());
|
||||
values.insert("x-forwarded-proto", HeaderValue::from_static(scheme));
|
||||
values.insert("x-forwarded-port", if let Some(cached) = cached {
|
||||
cached.port_header.clone()
|
||||
} else {
|
||||
local.port().to_string().parse()?
|
||||
});
|
||||
if let Some(peer) = cached {
|
||||
peer.remember_untrusted(authority, tls, &values);
|
||||
}
|
||||
values
|
||||
};
|
||||
let by_text = cached.is_none().then(|| node(canonical(local.ip())));
|
||||
let peer_node = cached.map_or_else(
|
||||
|| if peer_ip.is_ipv4() { peer_text.as_deref().unwrap_or("") }
|
||||
else { ipv6_node.as_deref().unwrap_or("") },
|
||||
|cached| cached.peer_node.as_str(),
|
||||
);
|
||||
let by_node = cached.map_or_else(|| by_text.as_deref().unwrap_or(""),
|
||||
|cached| cached.by_node.as_str());
|
||||
let forwarded = format!(
|
||||
"for={peer_node};by={by_node};proto={scheme};host=\"{authority_text}\""
|
||||
);
|
||||
let mut values = HeaderMap::with_capacity(7);
|
||||
values.insert("forwarded", forwarded.parse()?);
|
||||
values.insert("x-forwarded-for", peer_header.clone());
|
||||
values.insert("x-real-ip", peer_header);
|
||||
values.insert("x-forwarded-host", authority.clone());
|
||||
values.insert("x-forwarded-proto", HeaderValue::from_static(scheme));
|
||||
values.insert("x-forwarded-port", if let Some(cached) = cached {
|
||||
cached.port_header.clone()
|
||||
} else {
|
||||
local.port().to_string().parse()?
|
||||
});
|
||||
values.insert("x-forwarded-uri", target.parse()?);
|
||||
values.insert("x-forwarded-uri", target_header);
|
||||
return Ok(Context {
|
||||
client_ip: peer_ip,
|
||||
scheme,
|
||||
|
||||
Reference in new issue
Block a user