use crate::get_http_version_str;
use axum::body::Body;
use axum::http::{HeaderValue, StatusCode, header};
use axum::response::{IntoResponse, Response};
pub fn get_response_for_forwarded(via_domain: &str, res: reqwest::Response) -> impl IntoResponse {
let mut response_builder = Response::builder().status(res.status());
if let Some(headers) = response_builder.headers_mut() {
*headers = res.headers().clone();
let res_version = get_http_version_str(res.version());
let via = if let Some(src_via) = headers.get(header::VIA)
&& let Ok(src_via) = src_via.to_str()
{
format!("{src_via}, {res_version} {via_domain} (ordinaryd)")
} else {
format!("{res_version} {via_domain} (ordinaryd)")
};
if let Ok(via) = HeaderValue::from_str(&via) {
headers.insert(header::VIA, via);
}
}
match response_builder.body(Body::from_stream(res.bytes_stream())) {
Ok(res) => res.into_response(),
Err(err) => {
tracing::error!(%err);
StatusCode::INTERNAL_SERVER_ERROR.into_response()
}
}
}