pub mod auth;
pub mod request_id;
pub mod timeout;
pub mod uniform;
use axum::Router;
use tower_http::{
limit::RequestBodyLimitLayer, sensitive_headers::SetSensitiveRequestHeadersLayer,
trace::TraceLayer,
};
use crate::rest::RestConfig;
pub fn apply_default_layers(router: Router, config: RestConfig) -> Router {
let router = router.layer(RequestBodyLimitLayer::new(config.max_body_bytes));
let router = timeout::apply_timeout(router, config.timeout);
let router = router.layer(axum::middleware::from_fn(uniform::uniform_error_middleware));
let router = if let Some(auth) = config.auth {
router.layer(axum::middleware::from_fn(move |request, next| {
auth::auth_middleware(auth.clone(), request, next)
}))
} else {
router
};
router
.layer(request_id::propagate_request_id_layer())
.layer(request_id::set_request_id_layer())
.layer(TraceLayer::new_for_http())
.layer(SetSensitiveRequestHeadersLayer::new(std::iter::once(
axum::http::header::AUTHORIZATION,
)))
}