From 3e4bd471da6943ea6fa78c64234854b3bb00846c Mon Sep 17 00:00:00 2001 From: Jose Quintana <1700322+joseluisq@users.noreply.github.com> Date: Thu, 8 Jun 2023 22:51:50 +0200 Subject: [PATCH] fix: value is required for `page-fallback` when using empty values (#219) error: a value is required for '--page-fallback ' but none was supplied now is ok to pass an empty --page-fallback argument or empty SERVER_FALLBACK_PAGE log example when --page-fallback or its env is empty: 2023-06-08T20:34:13.806318Z INFO static_web_server::logger: logging level: trace 2023-06-08T20:34:13.806540Z DEBUG static_web_server::server: initializing tokio runtime with multi thread scheduler self.worker_threads=8 2023-06-08T20:34:13.808290Z TRACE static_web_server::server: starting web server 2023-06-08T20:34:13.808557Z INFO static_web_server::server: server bound to tcp socket [::]:8787 2023-06-08T20:34:13.808795Z INFO static_web_server::server: fallback page: enabled=false, value="" --- src/server.rs | 13 ++++++++++++- src/settings/cli.rs | 10 +++++++--- src/settings/mod.rs | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/server.rs b/src/server.rs index 0fbbfe1..cdd3b81 100644 --- a/src/server.rs +++ b/src/server.rs @@ -154,7 +154,18 @@ impl Server { let page50x = helpers::read_bytes_default(&general.page50x); // Fallback page content - let page_fallback = helpers::read_bytes_default(&general.page_fallback.unwrap_or_default()); + let page_fallback_pbuf = general.page_fallback; + let page_fallback = helpers::read_bytes_default(&page_fallback_pbuf); + let page_fallback_enabled = !page_fallback.is_empty(); + let mut page_fallback_opt = ""; + if page_fallback_enabled { + page_fallback_opt = page_fallback_pbuf.to_str().unwrap() + } + tracing::info!( + "fallback page: enabled={}, value=\"{}\"", + page_fallback_enabled, + page_fallback_opt + ); // Number of worker threads option let threads = self.worker_threads; diff --git a/src/settings/cli.rs b/src/settings/cli.rs index b1ccedd..75a4214 100644 --- a/src/settings/cli.rs +++ b/src/settings/cli.rs @@ -8,7 +8,7 @@ use clap::Parser; use std::path::PathBuf; -use crate::directory_listing::DirListFmt; +use crate::{directory_listing::DirListFmt, Result}; /// General server configuration available in CLI and config file options. #[derive(Parser, Debug)] @@ -102,9 +102,9 @@ pub struct General { /// HTML file path for 404 errors. If the path is not specified or simply doesn't exist then the server will use a generic HTML error message. pub page404: PathBuf, - #[arg(long, env = "SERVER_FALLBACK_PAGE")] + #[arg(long, default_value = "", value_parser = value_parser_pathbuf, env = "SERVER_FALLBACK_PAGE")] /// HTML file path that is used for GET requests when the requested path doesn't exist. The fallback page is served with a 200 status code, useful when using client routers. If the path is not specified or simply doesn't exist then this feature will not be active. - pub page_fallback: Option, + pub page_fallback: PathBuf, #[arg(long, short = 'g', default_value = "error", env = "SERVER_LOG_LEVEL")] /// Specify a logging level in lower case. Values: error, warn, info, debug or trace @@ -392,3 +392,7 @@ pub enum Commands { #[command(name = "uninstall")] Uninstall {}, } + +fn value_parser_pathbuf(s: &str) -> Result { + Ok(PathBuf::from(s)) +} diff --git a/src/settings/mod.rs b/src/settings/mod.rs index 9edf342..0a1f1ba 100644 --- a/src/settings/mod.rs +++ b/src/settings/mod.rs @@ -239,7 +239,7 @@ impl Settings { grace_period = v } if let Some(v) = general.page_fallback { - page_fallback = Some(v) + page_fallback = v } if let Some(v) = general.log_remote_address { log_remote_address = v -- libgit2 1.7.2