use std::net::SocketAddr;
use axum::extract::ConnectInfo;
use axum::http::request::Parts;
use did_hosting_common::server::domain::{HostHeaders, resolve_request_host};
pub(super) fn extract_request_host(
parts: &Parts,
trusted_cidrs: &[ipnetwork::IpNetwork],
) -> Option<String> {
let headers = &parts.headers;
let host = headers
.get(axum::http::header::HOST)
.and_then(|v| v.to_str().ok());
let forwarded = headers.get("forwarded").and_then(|v| v.to_str().ok());
let xfh = headers
.get("x-forwarded-host")
.and_then(|v| v.to_str().ok());
let h = HostHeaders {
host,
forwarded,
x_forwarded_host: xfh,
};
let peer_ip = parts
.extensions
.get::<ConnectInfo<SocketAddr>>()
.map(|ci| ci.0.ip());
resolve_request_host(&h, peer_ip, trusted_cidrs).map(|s| s.to_string())
}