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::() ).await.unwrap(); }