49 lines
1.1 KiB
Rust
49 lines
1.1 KiB
Rust
use std::{
|
|
env,
|
|
net::SocketAddr
|
|
};
|
|
use tokio::net::TcpListener;
|
|
use tower_http::services::ServeDir;
|
|
use axum::{
|
|
middleware,
|
|
routing::{get, post},
|
|
Router
|
|
};
|
|
|
|
mod argparse;
|
|
mod print_dir;
|
|
mod config;
|
|
mod shells;
|
|
mod logging;
|
|
mod upload;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let args = argparse::parse_args();
|
|
let conf = config::load_config();
|
|
let cwd = env::current_dir().unwrap();
|
|
|
|
let port = match args.port {
|
|
Some(port) => port,
|
|
None => conf.web_port
|
|
};
|
|
|
|
print_dir::print_interface(&args.interface, &port, &args.directory);
|
|
|
|
let app = Router::new()
|
|
.route("/upload", post(upload::upload_handler))
|
|
.route("/shells/:shell", get(shells::shells_handler))
|
|
.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.into_make_service_with_connect_info::<SocketAddr>()
|
|
).await.unwrap();
|
|
}
|