Compare commits
69 Commits
v1.1.34
...
f8f8c12d7e
| Author | SHA1 | Date | |
|---|---|---|---|
|
f8f8c12d7e
|
|||
|
75ae8b634e
|
|||
|
1bc7e2da76
|
|||
|
db9237f6dd
|
|||
|
0f668d8be0
|
|||
|
af54cdf66a
|
|||
|
09f7625ab2
|
|||
|
46da5afd20
|
|||
|
5f484e6a0e
|
|||
|
17c9ccf25d
|
|||
|
9813e6ec6d
|
|||
|
8d2a6a3b57
|
|||
|
32d7b30461
|
|||
|
f048a4b3da
|
|||
|
1e6bc9b6fd
|
|||
|
f8a279c77b
|
|||
|
783e14c49c
|
|||
|
ed9296e910
|
|||
|
75e3a13aad
|
|||
|
017e3360c6
|
|||
|
b2f9ca7d7d
|
|||
|
29babb9914
|
|||
|
65d9f55e19
|
|||
|
5bf863be1c
|
|||
|
c59d94af2f
|
|||
|
f7c3c7c60b
|
|||
|
91f4879ba4
|
|||
|
1247a86ccb
|
|||
|
df2095d214
|
|||
|
fcac2394f9
|
|||
|
b1d916961a
|
|||
|
f48b79e87f
|
|||
|
2cef444441
|
|||
|
b356dca31d
|
|||
|
c715626fc3
|
|||
|
bda8d7816b
|
|||
|
ed6115f5ea
|
|||
|
4a7c5dd1d7
|
|||
|
bc19aca540
|
|||
|
f30b4e2535
|
|||
|
3ff516ed1f
|
|||
|
394e332aa9
|
|||
|
6ae0990a54
|
|||
|
35356915fe
|
|||
|
86169cb345
|
|||
|
c3f74e076f
|
|||
|
244be2e41e
|
|||
|
80db486dc9
|
|||
|
9792d64f69
|
|||
|
a51035dbda
|
|||
|
e66ef328a1
|
|||
|
e44eb495ac
|
|||
|
73cd4a27ac
|
|||
|
6b050f3a05
|
|||
|
8b94b630be
|
|||
|
e35b0c9fd9
|
|||
|
b5a2c750c5
|
|||
|
c7b0ca62f6
|
|||
|
34457d1cc1
|
|||
|
e286e24d61
|
|||
|
9c1336b50c
|
|||
|
54e8015773
|
|||
|
30874a97f7
|
|||
|
05142358e1
|
|||
|
9f6891b4d5
|
|||
|
9c52aa8833
|
|||
|
0e244ebadd
|
|||
|
6ade932389
|
|||
|
7dc14a83cf
|
583
Cargo.lock
generated
583
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "expose-dir-via-http"
|
name = "expose-dir-via-http"
|
||||||
version = "1.1.34"
|
version = "1.3.28"
|
||||||
edition = "2021"
|
edition = "2024"
|
||||||
|
|
||||||
[lints.rust]
|
[lints.rust]
|
||||||
unsafe_code = "forbid"
|
unsafe_code = "forbid"
|
||||||
|
|||||||
27
src/main.rs
27
src/main.rs
@@ -1,18 +1,20 @@
|
|||||||
use std::{
|
use std::{
|
||||||
net::{IpAddr, SocketAddr},
|
net::{IpAddr, SocketAddr},
|
||||||
num::NonZeroUsize,
|
num::NonZeroUsize,
|
||||||
|
path::PathBuf,
|
||||||
|
sync::Arc,
|
||||||
thread::available_parallelism,
|
thread::available_parallelism,
|
||||||
};
|
};
|
||||||
|
|
||||||
use actix_web::{App, HttpServer};
|
use actix_web::{App, HttpServer};
|
||||||
use clap::{crate_name, crate_version, Parser};
|
use clap::{Parser, crate_name, crate_version};
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
#[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,18 +25,31 @@ struct Args {
|
|||||||
port: u16,
|
port: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_valid_dir(dir: &str) -> Result<PathBuf, String> {
|
||||||
|
let path = PathBuf::from(dir);
|
||||||
|
match std::fs::metadata(&path) {
|
||||||
|
Ok(metadata) if metadata.is_dir() => Ok(path),
|
||||||
|
Ok(_) => Err(format!("{} is not a directory", path.display())),
|
||||||
|
Err(e) => Err(format!("Error accessing {}: {}", path.display(), e)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[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();
|
||||||
|
|
||||||
let dir = args.dir;
|
let dir = Arc::new(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 || {
|
||||||
|
let dir = dir.clone();
|
||||||
App::new().service(
|
App::new().service(
|
||||||
actix_files::Files::new("/", dir.clone())
|
actix_files::Files::new("/", dir.as_ref())
|
||||||
.show_files_listing()
|
.show_files_listing()
|
||||||
.prefer_utf8(true),
|
.prefer_utf8(true),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user