use crate::nq_core::ScopedHeaders;
use anyhow::Context;
use http::{HeaderMap, HeaderValue};
const ACCESS_TOKEN_ENV: &str = "_MACH_CF_ACCESS_TOKEN";
const ACCESS_TOKEN_HEADER: &str = "cf-access-token";
const ALLOWED_HOST_SUFFIXES: &[&str] = &["speed.cloudflare.com"];
pub fn cf_access_scoped_headers() -> anyhow::Result<Option<ScopedHeaders>> {
let Ok(token) = std::env::var(ACCESS_TOKEN_ENV) else {
return Ok(None);
};
let token = token.trim();
if token.is_empty() {
return Ok(None);
}
let mut value = HeaderValue::from_str(token)
.with_context(|| format!("{ACCESS_TOKEN_ENV} is not a valid header value"))?;
value.set_sensitive(true);
let mut headers = HeaderMap::new();
headers.insert(ACCESS_TOKEN_HEADER, value);
let allowed_host_suffixes = ALLOWED_HOST_SUFFIXES
.iter()
.map(|s| s.to_string())
.collect();
Ok(Some(ScopedHeaders::new(headers, allowed_host_suffixes)))
}