40 lines
961 B
Rust
40 lines
961 B
Rust
pub mod request_info;
|
|
pub mod require_auth;
|
|
|
|
use std::{sync::Arc, time::Duration};
|
|
|
|
use axum::{
|
|
BoxError, Router,
|
|
error_handling::HandleErrorLayer,
|
|
http::{Method, StatusCode, Uri},
|
|
};
|
|
use tower::{ServiceBuilder, timeout::TimeoutLayer};
|
|
use tracing::warn;
|
|
|
|
use crate::routes::AppState;
|
|
|
|
pub const TIMEOUT_DURATION_SECS: u64 = 30;
|
|
|
|
pub fn apply_root_middleware(router: Router, _state: Arc<AppState>) -> Router {
|
|
let timeout_layer = TimeoutLayer::new(Duration::from_secs(TIMEOUT_DURATION_SECS));
|
|
|
|
let service_builder = ServiceBuilder::new()
|
|
.layer(HandleErrorLayer::new(handle_timeout_error))
|
|
.layer(timeout_layer);
|
|
|
|
router.layer(service_builder)
|
|
}
|
|
|
|
pub async fn handle_timeout_error(
|
|
method: Method,
|
|
uri: Uri,
|
|
//
|
|
err: BoxError,
|
|
) -> (StatusCode, String) {
|
|
warn!("`{method} {uri}` failed with {err}");
|
|
(
|
|
StatusCode::INTERNAL_SERVER_ERROR,
|
|
"Internal server error".to_string(),
|
|
)
|
|
}
|