use crate::server::error;
use axum::{
http::HeaderValue,
response::Response,
};
pub(super) fn finalize(response: &mut Response, id: &str) {
error::normalize_error(response, id);
response
.headers_mut()
.insert("x-request-id", id.parse().unwrap());
response.headers_mut().insert(
"x-content-type-options",
HeaderValue::from_static("nosniff"),
);
response
.headers_mut()
.insert("x-frame-options", HeaderValue::from_static("DENY"));
response
.headers_mut()
.insert("referrer-policy", HeaderValue::from_static("no-referrer"));
let csp = if response
.extensions()
.get::<crate::server::docs::SwaggerAsset>()
.is_some()
&& response.status().is_success()
{
"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; frame-ancestors 'none'"
} else {
"default-src 'none'; frame-ancestors 'none'"
};
response
.headers_mut()
.insert("content-security-policy", HeaderValue::from_static(csp));
}