lmrc_http_common/middleware/
mod.rs

1//! Reusable middleware for Axum applications
2
3pub mod request_id;
4pub mod logging;
5
6pub use request_id::{RequestIdLayer, add_request_id, RequestId, REQUEST_ID_HEADER};
7pub use logging::{LoggingLayer, log_request};
8
9use tower_http::cors::{Any, CorsLayer};
10
11/// Create a permissive CORS layer for development
12pub fn permissive_cors() -> CorsLayer {
13    CorsLayer::new()
14        .allow_origin(Any)
15        .allow_methods(Any)
16        .allow_headers(Any)
17        .allow_credentials(true)
18}
19
20/// Create a CORS layer with specific allowed origins
21pub fn cors_with_origins(origins: Vec<String>) -> CorsLayer {
22    use tower_http::cors::AllowOrigin;
23
24    let origins: Vec<_> = origins
25        .into_iter()
26        .filter_map(|o| o.parse().ok())
27        .collect();
28
29    CorsLayer::new()
30        .allow_origin(AllowOrigin::list(origins))
31        .allow_methods(Any)
32        .allow_headers(Any)
33        .allow_credentials(true)
34}