aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorProudmuslim <proudmuslim-dev@protonmail.com>2023-07-21 05:58:40 +0000
committerProudmuslim <proudmuslim-dev@protonmail.com>2023-07-21 05:58:40 +0000
commitfc6e179d6e613d7274c3b3ee27f5d4f68d11b9e6 (patch)
tree4e8c87aa614d963db4014fffd44b9ef621f8a853
parentBump deps (diff)
downloadminiserve-fc6e179d6e613d7274c3b3ee27f5d4f68d11b9e6.tar.gz
miniserve-fc6e179d6e613d7274c3b3ee27f5d4f68d11b9e6.zip
Add ability to read auth from file
-rw-r--r--src/args.rs6
-rw-r--r--src/config.rs16
2 files changed, 19 insertions, 3 deletions
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<auth::RequiredAuth>,
+ /// Read authentication values from a file.
+ #[arg(long, value_hint = ValueHint::FilePath, env = "MINISERVE_AUTH_FILE")]
+ pub auth_file: Option<PathBuf>,
+
/// Use a specific route prefix
#[arg(long = "route-prefix", env = "MINISERVE_ROUTE_PREFIX")]
pub route_prefix: Option<String>,
@@ -241,7 +245,7 @@ fn parse_interface(src: &str) -> Result<IpAddr, std::net::AddrParseError> {
}
/// Parse authentication requirement
-fn parse_auth(src: &str) -> Result<auth::RequiredAuth, ContextualError> {
+pub fn parse_auth(src: &str) -> Result<auth::RequiredAuth, ContextualError> {
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,