From ab23761e090b8ab6311a360eada7131f6663a3bf Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Thu, 1 Sep 2022 18:45:04 +0200 Subject: Fork from m6-ie project --- src/main.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..508d6cd --- /dev/null +++ b/src/main.rs @@ -0,0 +1,60 @@ +mod db; +mod errors; +mod logger; +mod models; +mod routes; + +use axum::{ + http::{header, Request}, + Router, +}; +use std::time::Duration; +use tower_http::sensitive_headers::SetSensitiveHeadersLayer; +use tower_http::{classify::ServerErrorsFailureClass, trace::TraceLayer}; +use tracing::Span; + +/// Main application, called by the execution of the software +#[tokio::main] +async fn main() { + let app = create_app().await; + + /// By default the server is bind at "127.0.0.1:3000" + let addr = std::env::var("ALLOWED_HOST").unwrap_or_else(|_| "127.0.0.1:3000".to_string()); + tracing::info!("Listening on {}", addr); + + axum::Server::bind(&addr.parse().unwrap()) + .serve(app.into_make_service()) + .await + .unwrap(); +} + +/// Create the app: setup everything and returns a `Router` +async fn create_app() -> Router { + logger::setup(); + let _ = db::setup().await; + + let api_routes = Router::new() + .nest("/users", routes::user::create_route()) + .nest("/auth", routes::auth::create_route()); + + Router::new() + // Map all routes to `/v1/*` namespace + .nest("/v1", api_routes) + // Mark the `Authorization` request header as sensitive so it doesn't + // show in logs. + .layer(SetSensitiveHeadersLayer::new(std::iter::once( + header::AUTHORIZATION, + ))) + // Use a layer for `TraceLayer` + .layer( + TraceLayer::new_for_http() + .on_request(|request: &Request<_>, _span: &Span| { + tracing::info!("{} {}", request.method(), request.uri()); + }) + .on_failure( + |error: ServerErrorsFailureClass, latency: Duration, _span: &Span| { + tracing::error!("{} | {} s", error, latency.as_secs()); + }, + ), + ) +} -- cgit v1.2.3-71-g8e6c