omni_director/api_clean/
middleware.rs1use axum::{
6 extract::Request,
7 http::StatusCode,
8 middleware::Next,
9 response::Response,
10};
11use std::time::Instant;
12
13pub async fn request_logging_middleware(
15 request: Request,
16 next: Next,
17) -> Result<Response, StatusCode> {
18 let start = Instant::now();
19 let method = request.method().clone();
20 let uri = request.uri().clone();
21
22 println!("📥 {} {}", method, uri);
23
24 let response = next.run(request).await;
25
26 let duration = start.elapsed();
27 let status = response.status();
28
29 println!("📤 {} {} {} ({:.2}ms)", method, uri, status, duration.as_secs_f64() * 1000.0);
30
31 Ok(response)
32}
33
34pub async fn error_handling_middleware(
36 request: Request,
37 next: Next,
38) -> Result<Response, StatusCode> {
39 let response = next.run(request).await;
40
41 if response.status().is_client_error() || response.status().is_server_error() {
43 println!("❌ Error response: {}", response.status());
44 }
45
46 Ok(response)
47}
48
49pub async fn cors_middleware(
51 request: Request,
52 next: Next,
53) -> Result<Response, StatusCode> {
54 let mut response = next.run(request).await;
55
56 let headers = response.headers_mut();
57 headers.insert("Access-Control-Allow-Origin", "*".parse().unwrap());
58 headers.insert("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS".parse().unwrap());
59 headers.insert("Access-Control-Allow-Headers", "Content-Type, Authorization".parse().unwrap());
60
61 Ok(response)
62}
63
64pub async fn auth_middleware(
66 request: Request,
67 next: Next,
68) -> Result<Response, StatusCode> {
69 Ok(next.run(request).await)
72}
73
74pub async fn rate_limit_middleware(
76 request: Request,
77 next: Next,
78) -> Result<Response, StatusCode> {
79 Ok(next.run(request).await)
82}