index : static-web-server.git

ascending towards madness

author Jose Quintana <1700322+joseluisq@users.noreply.github.com> 2023-06-08 20:51:50.0 +00:00:00
committer GitHub <noreply@github.com> 2023-06-08 20:51:50.0 +00:00:00
commit
3e4bd471da6943ea6fa78c64234854b3bb00846c [patch]
tree
f456e01096334be3ddfb7bc035d8453b07c11ad9
parent
986b663fe4540f07bb49f52ea7dceb7895b4a3a1
download
3e4bd471da6943ea6fa78c64234854b3bb00846c.tar.gz

fix: value is required for `page-fallback` when using empty values (#219)

error: a value is required for '--page-fallback <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=""

Diff

 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<PathBuf>,
    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<PathBuf, String> {
    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