From fc6e179d6e613d7274c3b3ee27f5d4f68d11b9e6 Mon Sep 17 00:00:00 2001 From: Proudmuslim Date: Thu, 20 Jul 2023 22:58:40 -0700 Subject: Add ability to read auth from file --- src/args.rs | 6 +++++- src/config.rs | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/args.rs b/src/args.rs index f7b42f1..020539a 100644 --- a/src/args.rs +++ b/src/args.rs @@ -72,6 +72,10 @@ pub struct CliArgs { )] pub auth: Vec, + /// Read authentication values from a file. + #[arg(long, value_hint = ValueHint::FilePath, env = "MINISERVE_AUTH_FILE")] + pub auth_file: Option, + /// Use a specific route prefix #[arg(long = "route-prefix", env = "MINISERVE_ROUTE_PREFIX")] pub route_prefix: Option, @@ -241,7 +245,7 @@ fn parse_interface(src: &str) -> Result { } /// Parse authentication requirement -fn parse_auth(src: &str) -> Result { +pub fn parse_auth(src: &str) -> Result { let mut split = src.splitn(3, ':'); let invalid_auth_format = Err(ContextualError::InvalidAuthFormat); diff --git a/src/config.rs b/src/config.rs index 8976d35..e353afd 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,7 @@ #[cfg(feature = "tls")] use std::{fs::File, io::BufReader}; use std::{ + io::BufRead, net::{IpAddr, Ipv4Addr, Ipv6Addr}, path::PathBuf, }; @@ -14,7 +15,7 @@ use http::HeaderMap; use rustls_pemfile as pemfile; use crate::{ - args::{CliArgs, MediaType}, + args::{parse_auth, CliArgs, MediaType}, auth::RequiredAuth, file_upload::sanitize_path, renderer::ThemeSlug, @@ -157,6 +158,17 @@ impl MiniserveConfig { _ => "".to_owned(), }; + let mut auth = args.auth; + + if let Some(path) = args.auth_file { + let file = File::open(path)?; + let lines = BufReader::new(file).lines(); + + for line in lines { + auth.push(parse_auth(line?.as_str())?); + } + } + // Generate some random routes for the favicon and css so that they are very unlikely to conflict with // real files. // If --random-route is enabled , in order to not leak the random generated route, we must not use it @@ -239,7 +251,7 @@ impl MiniserveConfig { path: args.path.unwrap_or_else(|| PathBuf::from(".")), port, interfaces, - auth: args.auth, + auth, path_explicitly_chosen, no_symlinks: args.no_symlinks, show_hidden: args.hidden, -- cgit v1.2.3 From 086ca31ce84f416350220fb89d2568064eeaeb4e Mon Sep 17 00:00:00 2001 From: proudmuslim-dev <69869443+proudmuslim-dev@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:02:24 +0000 Subject: Update src/args.rs Co-authored-by: Sven-Hendrik Haase --- src/args.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/args.rs b/src/args.rs index 020539a..9e66580 100644 --- a/src/args.rs +++ b/src/args.rs @@ -72,7 +72,7 @@ pub struct CliArgs { )] pub auth: Vec, - /// Read authentication values from a file. + /// Read authentication values from a file #[arg(long, value_hint = ValueHint::FilePath, env = "MINISERVE_AUTH_FILE")] pub auth_file: Option, -- cgit v1.2.3 From be54a9d3364166039f2b84f85f23b26a6edd09ba Mon Sep 17 00:00:00 2001 From: proudmuslim-dev <69869443+proudmuslim-dev@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:06:21 +0000 Subject: Add file content example to `--auth-file` argument --- src/args.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/args.rs b/src/args.rs index 9e66580..87ecabb 100644 --- a/src/args.rs +++ b/src/args.rs @@ -72,7 +72,11 @@ pub struct CliArgs { )] pub auth: Vec, - /// Read authentication values from a file + /// Read authentication values from a file. Example file content: + /// + /// joe:123 + /// bob:sha256:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 + /// bill: #[arg(long, value_hint = ValueHint::FilePath, env = "MINISERVE_AUTH_FILE")] pub auth_file: Option, -- cgit v1.2.3