diff --git a/Cargo.lock b/Cargo.lock index d6046b3..0e20e10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -121,9 +121,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -144,7 +144,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper", "tower-layer", "tower-service", "tracing", @@ -847,12 +847,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.1" @@ -938,14 +932,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 0.1.2", + "sync_wrapper", "tokio", "tower-layer", "tower-service", diff --git a/Cargo.toml b/Cargo.toml index 1601710..fe06d2c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,4 +13,4 @@ if-addrs = "0.13.3" serde = { version = "1.0.216", features = ["derive"] } serde_yaml = "0.9.34" tokio = { version = "1.40.0", features = ["full"] } -tower-http = { version = "0.6.2", features = ["fs"] } +tower-http = { version = "0.6.2", features = ["fs", "trace"] } diff --git a/src/config.rs b/src/config.rs index ece6d19..a8a6c81 100644 --- a/src/config.rs +++ b/src/config.rs @@ -31,6 +31,14 @@ impl Config { serde_yaml::from_reader(reader).unwrap() } + pub fn get_download_path(&self) -> PathBuf { + self.download_path.clone() + } + + pub fn get_upload_path(&self) -> PathBuf { + self.upload_path.clone() + } + pub fn get_shell>(&self, key: S) -> Option { let key_str = key.into(); self.shells.get(&key_str).cloned() diff --git a/src/logging.rs b/src/logging.rs new file mode 100644 index 0000000..739cfb8 --- /dev/null +++ b/src/logging.rs @@ -0,0 +1,17 @@ +use std::net::SocketAddr; +use axum::{ + extract::ConnectInfo, + response::Response, + middleware::Next, + http::Request, + body::Body +}; + +pub async fn logging_middleware( + ConnectInfo(addr): ConnectInfo, + req: Request, + next: Next +) -> Response { + println!("[{}] {} {}", addr, req.method(), req.uri()); + next.run(req).await +} diff --git a/src/main.rs b/src/main.rs index 0f3590b..83129f2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,20 @@ +use std::{ + env, + net::SocketAddr +}; use tokio::net::TcpListener; use tower_http::services::ServeDir; -use axum::routing::{get, post}; -use axum::Router; -use std::env; -use std::net::SocketAddr; +use axum::{ + middleware, + routing::get, + Router +}; mod argparse; mod print_dir; mod config; mod shells; +mod logging; #[tokio::main] async fn main() { @@ -24,14 +30,18 @@ async fn main() { print_dir::print_interface(&args.interface, &port, &args.directory); let app = Router::new() - //.route("/download/:path", get(download_handler)) //.route("/upload", post(upload_handler)) .route("/shells/:shell", get(shells::shells_handler)) - .nest_service("/", ServeDir::new(cwd)); + .nest_service("/download", ServeDir::new(conf.get_download_path())) + .nest_service("/", ServeDir::new(cwd)) + .layer(middleware::from_fn(logging::logging_middleware)); let listener = TcpListener::bind(format!("0.0.0.0:{}", port)) .await .unwrap(); - axum::serve(listener, app).await.unwrap(); + axum::serve( + listener, + app.into_make_service_with_connect_info::() + ).await.unwrap(); }