diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs index 9ad772d..64abf68 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,14 @@ use std::net::SocketAddr; -use axum::{Router, response::Response, http::Request, middleware::{Next, self}}; +use axum::{Router, response::Response, http::Request, middleware::{Next, self}, extract::ConnectInfo, RequestExt, body::HttpBody, Extension}; use tower_cookies::CookieManagerLayer; -use types::response::ResponseCode; +use types::{response::ResponseCode}; -use crate::api::{pages, auth, users, posts}; +use crate::{api::{pages, auth, users, posts}, types::extract::RouterURI}; mod api; mod database; mod types; +mod console; async fn serve<B>(req: Request<B>, next: Next<B>) -> Response { let Ok(file) = ResponseCode::Success.file(&req.uri().to_string()).await else { @@ -16,6 +17,19 @@ async fn serve<B>(req: Request<B>, next: Next<B>) -> Response { file } +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(), req.uri(), None, None).await; + + return next.run(req).await +} + async fn not_found() -> Response { match ResponseCode::NotFound.file("/404.html").await { Ok(file) => file, @@ -30,18 +44,22 @@ async fn main() { let app = Router::new() .fallback(not_found) - .layer(middleware::from_fn(serve)) .nest("/", pages::router()) - .nest("/api/auth", auth::router()) - .nest("/api/users", users::router()) - .nest("/api/posts", posts::router()) - .layer(CookieManagerLayer::new()); + .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 addr = SocketAddr::from(([127, 0, 0, 1], 8080)); + let addr = "[::]:8080".parse::<std::net::SocketAddr>().unwrap(); println!("Listening on {}", addr); axum::Server::bind(&addr) - .serve(app.into_make_service()) + .serve(app.into_make_service_with_connect_info::<SocketAddr>()) .await .unwrap(); |