Added request logging middleware
This commit is contained in:
parent
ceb1ab44d3
commit
0b2a4f130e
18
Cargo.lock
generated
18
Cargo.lock
generated
@ -121,9 +121,9 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_path_to_error",
|
"serde_path_to_error",
|
||||||
"serde_urlencoded",
|
"serde_urlencoded",
|
||||||
"sync_wrapper 1.0.1",
|
"sync_wrapper",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower 0.5.1",
|
"tower 0.5.2",
|
||||||
"tower-layer",
|
"tower-layer",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
"tracing",
|
"tracing",
|
||||||
@ -144,7 +144,7 @@ dependencies = [
|
|||||||
"mime",
|
"mime",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"rustversion",
|
"rustversion",
|
||||||
"sync_wrapper 1.0.1",
|
"sync_wrapper",
|
||||||
"tower-layer",
|
"tower-layer",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
"tracing",
|
"tracing",
|
||||||
@ -847,12 +847,6 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "sync_wrapper"
|
|
||||||
version = "0.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sync_wrapper"
|
name = "sync_wrapper"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@ -938,14 +932,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower"
|
name = "tower"
|
||||||
version = "0.5.1"
|
version = "0.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f"
|
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"sync_wrapper 0.1.2",
|
"sync_wrapper",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower-layer",
|
"tower-layer",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
|
@ -13,4 +13,4 @@ if-addrs = "0.13.3"
|
|||||||
serde = { version = "1.0.216", features = ["derive"] }
|
serde = { version = "1.0.216", features = ["derive"] }
|
||||||
serde_yaml = "0.9.34"
|
serde_yaml = "0.9.34"
|
||||||
tokio = { version = "1.40.0", features = ["full"] }
|
tokio = { version = "1.40.0", features = ["full"] }
|
||||||
tower-http = { version = "0.6.2", features = ["fs"] }
|
tower-http = { version = "0.6.2", features = ["fs", "trace"] }
|
||||||
|
@ -31,6 +31,14 @@ impl Config {
|
|||||||
serde_yaml::from_reader(reader).unwrap()
|
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<S: Into<String>>(&self, key: S) -> Option<String> {
|
pub fn get_shell<S: Into<String>>(&self, key: S) -> Option<String> {
|
||||||
let key_str = key.into();
|
let key_str = key.into();
|
||||||
self.shells.get(&key_str).cloned()
|
self.shells.get(&key_str).cloned()
|
||||||
|
17
src/logging.rs
Normal file
17
src/logging.rs
Normal file
@ -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<SocketAddr>,
|
||||||
|
req: Request<Body>,
|
||||||
|
next: Next
|
||||||
|
) -> Response {
|
||||||
|
println!("[{}] {} {}", addr, req.method(), req.uri());
|
||||||
|
next.run(req).await
|
||||||
|
}
|
24
src/main.rs
24
src/main.rs
@ -1,14 +1,20 @@
|
|||||||
|
use std::{
|
||||||
|
env,
|
||||||
|
net::SocketAddr
|
||||||
|
};
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
use tower_http::services::ServeDir;
|
use tower_http::services::ServeDir;
|
||||||
use axum::routing::{get, post};
|
use axum::{
|
||||||
use axum::Router;
|
middleware,
|
||||||
use std::env;
|
routing::get,
|
||||||
use std::net::SocketAddr;
|
Router
|
||||||
|
};
|
||||||
|
|
||||||
mod argparse;
|
mod argparse;
|
||||||
mod print_dir;
|
mod print_dir;
|
||||||
mod config;
|
mod config;
|
||||||
mod shells;
|
mod shells;
|
||||||
|
mod logging;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
@ -24,14 +30,18 @@ async fn main() {
|
|||||||
print_dir::print_interface(&args.interface, &port, &args.directory);
|
print_dir::print_interface(&args.interface, &port, &args.directory);
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
//.route("/download/:path", get(download_handler))
|
|
||||||
//.route("/upload", post(upload_handler))
|
//.route("/upload", post(upload_handler))
|
||||||
.route("/shells/:shell", get(shells::shells_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))
|
let listener = TcpListener::bind(format!("0.0.0.0:{}", port))
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
axum::serve(listener, app).await.unwrap();
|
axum::serve(
|
||||||
|
listener,
|
||||||
|
app.into_make_service_with_connect_info::<SocketAddr>()
|
||||||
|
).await.unwrap();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user