From 30874a97f791e98b2bef0c2be8746b3e16813e1d Mon Sep 17 00:00:00 2001 From: ddidderr Date: Mon, 10 Feb 2025 22:04:53 +0100 Subject: [PATCH] [feat] only allow valid dirs as 1st arg --- src/main.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 43de022..c928ef3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use std::{ net::{IpAddr, SocketAddr}, num::NonZeroUsize, + path::PathBuf, thread::available_parallelism, }; @@ -11,8 +12,8 @@ use clap::{crate_name, crate_version, Parser}; #[clap(name = crate_name!(), version = crate_version!())] struct Args { /// Directory to expose - #[clap(default_value = ".")] - dir: String, + #[clap(default_value = ".", value_parser = parse_valid_dir)] + dir: PathBuf, /// IP address to use #[clap(default_value = "0.0.0.0")] @@ -23,6 +24,15 @@ struct Args { port: u16, } +fn parse_valid_dir(dir: &str) -> Result { + let path = std::path::Path::new(dir); + if path.is_dir() { + Ok(path.to_path_buf()) + } else { + Err(format!("{} is not a valid directory", path.display())) + } +} + #[actix_web::main] async fn main() -> std::io::Result<()> { let args = Args::parse(); @@ -30,7 +40,10 @@ async fn main() -> std::io::Result<()> { let dir = args.dir; let sock = SocketAddr::new(args.ip, args.port); - println!("Starting HTTP server on {sock} exposing dir {dir}"); + println!( + "Starting HTTP server on {sock} exposing dir {}", + dir.display() + ); HttpServer::new(move || { App::new().service(