Compare commits

...

2 Commits

Author SHA1 Message Date
54e8015773 [release] expose-dir-via-http v1.2.0 2025-02-10 22:06:00 +01:00
30874a97f7 [feat] only allow valid dirs as 1st arg 2025-02-10 22:04:53 +01:00
3 changed files with 18 additions and 5 deletions

2
Cargo.lock generated
View File

@ -562,7 +562,7 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]] [[package]]
name = "expose-dir-via-http" name = "expose-dir-via-http"
version = "1.1.37" version = "1.2.0"
dependencies = [ dependencies = [
"actix-files", "actix-files",
"actix-web", "actix-web",

View File

@ -1,6 +1,6 @@
[package] [package]
name = "expose-dir-via-http" name = "expose-dir-via-http"
version = "1.1.37" version = "1.2.0"
edition = "2021" edition = "2021"
[lints.rust] [lints.rust]

View File

@ -1,6 +1,7 @@
use std::{ use std::{
net::{IpAddr, SocketAddr}, net::{IpAddr, SocketAddr},
num::NonZeroUsize, num::NonZeroUsize,
path::PathBuf,
thread::available_parallelism, thread::available_parallelism,
}; };
@ -11,8 +12,8 @@ use clap::{crate_name, crate_version, Parser};
#[clap(name = crate_name!(), version = crate_version!())] #[clap(name = crate_name!(), version = crate_version!())]
struct Args { struct Args {
/// Directory to expose /// Directory to expose
#[clap(default_value = ".")] #[clap(default_value = ".", value_parser = parse_valid_dir)]
dir: String, dir: PathBuf,
/// IP address to use /// IP address to use
#[clap(default_value = "0.0.0.0")] #[clap(default_value = "0.0.0.0")]
@ -23,6 +24,15 @@ struct Args {
port: u16, port: u16,
} }
fn parse_valid_dir(dir: &str) -> Result<PathBuf, String> {
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] #[actix_web::main]
async fn main() -> std::io::Result<()> { async fn main() -> std::io::Result<()> {
let args = Args::parse(); let args = Args::parse();
@ -30,7 +40,10 @@ async fn main() -> std::io::Result<()> {
let dir = args.dir; let dir = args.dir;
let sock = SocketAddr::new(args.ip, args.port); 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 || { HttpServer::new(move || {
App::new().service( App::new().service(