Compare commits
135 Commits
v1.0.40
...
9813e6ec6d
Author | SHA1 | Date | |
---|---|---|---|
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
|
|||
7a6da447ab
|
|||
69a0948cf7
|
|||
a738845b99
|
|||
fc8caf5f70
|
|||
9fed0f99fa
|
|||
363d0f65a3
|
|||
2df79f2cd9
|
|||
89ab6fbe53
|
|||
f41fcb201b
|
|||
c0284f8f76
|
|||
8416ed51e7
|
|||
238f452531
|
|||
5836b71635
|
|||
4e83bfe815
|
|||
462910f6db
|
|||
3a4a9dc1f1
|
|||
1750a14fdf
|
|||
1c2616fc0c
|
|||
14e2878dea
|
|||
9461368fa9
|
|||
8ae92de0f3
|
|||
2ae69ed152
|
|||
5ac30a6a5a
|
|||
979bab809c
|
|||
844dfd9e3a
|
|||
ac3e4f38a2
|
|||
5145c3cb29
|
|||
cc95f0c163
|
|||
4954098f53
|
|||
c60eca2808
|
|||
0f24b879bd
|
|||
9963cceb59
|
|||
f80e465b40
|
|||
6d18869c57
|
|||
72b4fb147e
|
|||
f8d170f8c3
|
|||
0d18904e33
|
|||
bab14f394c
|
|||
75e5c4448c
|
|||
ceb1472040
|
|||
c9d0a7fabc
|
|||
107f20222d
|
|||
778b245d56
|
|||
fbf1c5b9d3
|
|||
442cb9b825
|
|||
83e64db434
|
|||
4ccc9ddaac
|
|||
4b71a46a5b
|
|||
34e0bcc75e
|
|||
3bb8e14a96
|
|||
00711117ac
|
|||
bab112e01c
|
|||
e8617a9254
|
|||
cde936d915
|
|||
c11a7e8420
|
|||
a76eff9936
|
|||
38f679ed07
|
|||
2b038ccb12
|
|||
544f44b4d9
|
|||
099bed55da
|
|||
80ba8ff09c
|
|||
fb2595f5a3
|
|||
f848fd7cd3
|
|||
cf2d26f772
|
|||
7a371e9933
|
|||
794af78718
|
|||
459d96daf4
|
|||
370e0a1401
|
|||
3c2c357f17
|
|||
d7a9f54769
|
|||
3a6bdb46e4
|
|||
018e782f1e
|
|||
0613110921
|
|||
b1e0b61f97
|
|||
ff7650aabd
|
|||
5ab16f4fe7
|
757
Cargo.lock
generated
757
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "expose-dir-via-http"
|
||||
version = "1.0.40"
|
||||
edition = "2021"
|
||||
version = "1.3.23"
|
||||
edition = "2024"
|
||||
|
||||
[lints.rust]
|
||||
unsafe_code = "forbid"
|
||||
@ -12,7 +12,7 @@ todo = "warn"
|
||||
unwrap_used = "warn"
|
||||
|
||||
[dependencies]
|
||||
actix-web = { version = "4", features = ["experimental-io-uring"] }
|
||||
actix-web = { version = "4" }
|
||||
actix-files = "0.6"
|
||||
clap = { version = "4", features = ["cargo", "derive"] }
|
||||
|
||||
|
27
src/main.rs
27
src/main.rs
@ -1,18 +1,20 @@
|
||||
use std::{
|
||||
net::{IpAddr, SocketAddr},
|
||||
num::NonZeroUsize,
|
||||
path::PathBuf,
|
||||
sync::Arc,
|
||||
thread::available_parallelism,
|
||||
};
|
||||
|
||||
use actix_web::{App, HttpServer};
|
||||
use clap::{crate_name, crate_version, Parser};
|
||||
use clap::{Parser, crate_name, crate_version};
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[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,18 +25,31 @@ struct Args {
|
||||
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]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
let args = Args::parse();
|
||||
|
||||
let dir = args.dir;
|
||||
let dir = Arc::new(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 || {
|
||||
let dir = dir.clone();
|
||||
App::new().service(
|
||||
actix_files::Files::new("/", dir.clone())
|
||||
actix_files::Files::new("/", dir.as_ref())
|
||||
.show_files_listing()
|
||||
.prefer_utf8(true),
|
||||
)
|
||||
|
Reference in New Issue
Block a user