diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 80 |
1 files changed, 53 insertions, 27 deletions
diff --git a/src/main.rs b/src/main.rs index 31b749e..cd137b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,31 @@ +use axum::{ + body::HttpBody, + extract::ConnectInfo, + http::{Request, StatusCode}, + middleware::{self, Next}, + response::Response, + Extension, RequestExt, Router, +}; use std::{net::SocketAddr, process::exit}; -use axum::{Router, response::Response, http::{Request, StatusCode}, middleware::{Next, self}, extract::ConnectInfo, RequestExt, body::HttpBody, Extension}; use tower_cookies::CookieManagerLayer; -use tracing::{metadata::LevelFilter, error, info}; -use tracing_subscriber::{prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt, Layer, filter::filter_fn}; +use tracing::{error, info, metadata::LevelFilter}; +use tracing_subscriber::{ + filter::filter_fn, prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt, Layer, +}; use types::http::ResponseCode; -use crate::{api::{pages, auth, users, posts}, types::extract::RouterURI}; +use crate::{ + api::{auth, pages, posts, users}, + types::extract::RouterURI, +}; mod api; +mod console; mod database; mod types; -mod console; -async fn serve<B>(req: Request<B>, next: Next<B>) -> Response where +async fn serve<B>(req: Request<B>, next: Next<B>) -> Response +where B: Send + Sync + 'static + HttpBody, { let uri = req.uri(); @@ -23,15 +36,22 @@ async fn serve<B>(req: Request<B>, next: Next<B>) -> Response where file } -async fn log<B>(mut req: Request<B>, next: Next<B>) -> Response where +async fn log<B>(mut req: Request<B>, next: Next<B>) -> Response +where B: Send + Sync + 'static + HttpBody, { - let Ok(ConnectInfo(info)) = req.extract_parts::<ConnectInfo<SocketAddr>>().await else { return next.run(req).await }; - console::log(info.ip(), req.method().clone(), req.uri().clone(), None, None).await; + console::log( + info.ip(), + req.method().clone(), + req.uri().clone(), + None, + None, + ) + .await; next.run(req).await } @@ -42,13 +62,14 @@ async fn not_found() -> Response { #[tokio::main] async fn main() { - let fmt_layer = tracing_subscriber::fmt::layer(); - tracing_subscriber::registry() + tracing_subscriber::registry() .with( - fmt_layer.with_filter(LevelFilter::TRACE).with_filter(filter_fn(|metadata| { - metadata.target().starts_with("xssbook") - })) + fmt_layer + .with_filter(LevelFilter::TRACE) + .with_filter(filter_fn(|metadata| { + metadata.target().starts_with("xssbook") + })), ) .init(); @@ -58,17 +79,23 @@ async fn main() { }; let app = Router::new() - .fallback(not_found) - .nest("/", pages::router()) - .layer(middleware::from_fn(log)) - .layer(middleware::from_fn(serve)) - .nest("/api/auth", auth::router() - .layer(Extension(RouterURI("/api/auth"))) - ).nest("/api/users", users::router() - .layer(Extension(RouterURI("/api/users"))) - ).nest("/api/posts", posts::router() - .layer(Extension(RouterURI("/api/posts"))) - ).layer(CookieManagerLayer::new()); + .fallback(not_found) + .nest("/", pages::router()) + .layer(middleware::from_fn(log)) + .layer(middleware::from_fn(serve)) + .nest( + "/api/auth", + auth::router().layer(Extension(RouterURI("/api/auth"))), + ) + .nest( + "/api/users", + users::router().layer(Extension(RouterURI("/api/users"))), + ) + .nest( + "/api/posts", + posts::router().layer(Extension(RouterURI("/api/posts"))), + ) + .layer(CookieManagerLayer::new()); let Ok(addr) = "[::]:8080".parse::<std::net::SocketAddr>() else { error!("Failed to parse port binding"); @@ -76,10 +103,9 @@ async fn main() { }; info!("listening on {}", addr); - + axum::Server::bind(&addr) .serve(app.into_make_service_with_connect_info::<SocketAddr>()) .await .unwrap_or(()); - } |