diff --git a/Cargo.toml b/Cargo.toml index 73a5eca..b1a2a2a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,5 +44,7 @@ optimized = ["libwebp-sys?/sse41", "libwebp-sys?/avx2", "libwebp-sys?/neon"] qhash = ["blake3"] +prefix-path = [] + [profile.release] lto = true diff --git a/src/main.rs b/src/main.rs index daed748..c66a754 100644 --- a/src/main.rs +++ b/src/main.rs @@ -159,6 +159,9 @@ fn is_header_allowed(header: &str) -> bool { !matches!( header, "host" + | "authorization" + | "cookie" + | "etag" | "content-length" | "set-cookie" | "alt-svc" diff --git a/src/utils.rs b/src/utils.rs index d5efe91..15b76d6 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -3,6 +3,14 @@ use reqwest::Url; use std::borrow::Cow; use std::collections::BTreeMap; use std::env; +#[cfg(feature = "prefix-path")] +{ + use once_cell::sync::Lazy; + static PREFIX_PATH: Lazy> = Lazy::new(|| match env::var("PREFIX_PATH") { + Ok(v) => Some(String::from(v)), + Err(e) => panic!("$PREFIX_PATH is not set ({})", e) + }); +} pub fn read_buf(buf: &[u8], pos: &mut usize) -> u8 { let byte = buf[*pos]; @@ -45,13 +53,33 @@ fn finalize_url(path: &str, query: BTreeMap) -> String { if let Some(qhash) = qhash { let mut query = QString::new(query.into_iter().collect::>()); + query.add_pair(("qhash", qhash.unwrap())); + #[cfg(not(feature = "prefix-path"))] + { + return format!("{}?{}", path, query); + } + + + #[cfg(feature = "prefix-path")] + { + return format!("{}{}?{}", PREFIX_PATH.as_ref().unwrap().to_string(), path, query); + } query.add_pair(("qhash", qhash)); return format!("{}?{}", path, query); } } let query = QString::new(query.into_iter().collect::>()); - format!("{}?{}", path, query) + #[cfg(not(feature = "prefix-path"))] + { + format!("{}?{}", path, query) + } + + + #[cfg(feature = "prefix-path")] + { + format!("{}{}?{}", PREFIX_PATH.as_ref().unwrap().to_string(), path, query) + } } pub fn localize_url(url: &str, host: &str) -> String {