summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs38
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();