index : static-web-server.git

ascending towards madness

author Jose Quintana <joseluisquintana20@gmail.com> 2022-05-24 7:52:07.0 +00:00:00
committer Jose Quintana <joseluisquintana20@gmail.com> 2022-05-24 7:52:07.0 +00:00:00
commit
a2a2b8965310976d4dcdc44e9a19feb88b8254b6 [patch]
tree
61dfa0bf74973defdc4fc8487384c7a256956881
parent
b0499dfefd7d4f1b78a3373928f9c7b399022717
download
a2a2b8965310976d4dcdc44e9a19feb88b8254b6.tar.gz

refactor: log request feature optional via '--log-remote-address`



Diff

 docs/content/configuration/config-file.md | 10 ++++++++++
 src/handler.rs                            | 14 ++++++++++----
 src/server.rs                             |  5 +++++
 src/settings/cli.rs                       |  9 +++++++++
 src/settings/file.rs                      |  2 ++
 src/settings/mod.rs                       |  5 +++++
 tests/toml/config.toml                    | 15 ++++++++++++++-
 7 files changed, 55 insertions(+), 5 deletions(-)

diff --git a/docs/content/configuration/config-file.md b/docs/content/configuration/config-file.md
index 8346e08..9d827e7 100644
--- a/docs/content/configuration/config-file.md
+++ b/docs/content/configuration/config-file.md
@@ -60,6 +60,16 @@ grace-period = 0
#### Page fallback for 404s
# page-fallback = "some_page.html"

#### Log request Remote Address if available
log-remote-address = false


### Windows Only

#### Run the web server as a Windows Service
# windows-service = false



[advanced]

diff --git a/src/handler.rs b/src/handler.rs
index bb311b4..dbb7905 100644
--- a/src/handler.rs
+++ b/src/handler.rs
@@ -20,6 +20,7 @@ pub struct RequestHandlerOpts {
    pub page50x: Vec<u8>,
    pub page_fallback: Vec<u8>,
    pub basic_auth: String,
    pub log_remote_address: bool,

    // Advanced options
    pub advanced_opts: Option<Advanced>,
@@ -46,16 +47,21 @@ impl RequestHandler {
        let uri_query = uri.query();
        let dir_listing = self.opts.dir_listing;
        let dir_listing_order = self.opts.dir_listing_order;
        let log_remote_addr = self.opts.log_remote_address;

        let mut cors_headers: Option<http::HeaderMap> = None;

        // Log request information with its remote address
        let remote_addr = remote_addr.map_or("".to_owned(), |v| v.to_string());
        // Log request information with its remote address if available
        let mut remote_addr_str = String::new();
        if log_remote_addr {
            remote_addr_str.push_str(" remote_addr=");
            remote_addr_str.push_str(&remote_addr.map_or("".to_owned(), |v| v.to_string()));
        }
        tracing::info!(
            "incoming request: method={} uri={} remote_addr={}",
            "incoming request: method={} uri={}{}",
            method,
            uri,
            remote_addr,
            remote_addr_str,
        );

        async move {
diff --git a/src/server.rs b/src/server.rs
index 77f469b..4b4d650 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -162,6 +162,10 @@ impl Server {
            !general.basic_auth.is_empty()
        );

        // Log remote address option
        let log_remote_address = general.log_remote_address;
        tracing::info!("log remote address: enabled={}", log_remote_address);

        // Grace period option
        let grace_period = general.grace_period;
        tracing::info!("grace period before graceful shutdown: {}s", grace_period);
@@ -180,6 +184,7 @@ impl Server {
                page50x,
                page_fallback,
                basic_auth,
                log_remote_address,
                advanced_opts,
            }),
        });
diff --git a/src/settings/cli.rs b/src/settings/cli.rs
index 9f2a033..f062165 100644
--- a/src/settings/cli.rs
+++ b/src/settings/cli.rs
@@ -170,6 +170,15 @@ pub struct General {
    /// Server TOML configuration file path.
    pub config_file: Option<PathBuf>,

    #[structopt(
        long,
        parse(try_from_str),
        default_value = "false",
        env = "SERVER_LOG_REMOTE_ADDRESS"
    )]
    /// Log incoming requests information along with its remote address if available using the `info` log level.
    pub log_remote_address: bool,

    //
    // Windows specific arguments and commands
    //
diff --git a/src/settings/file.rs b/src/settings/file.rs
index d0b565c..22be141 100644
--- a/src/settings/file.rs
+++ b/src/settings/file.rs
@@ -96,6 +96,8 @@ pub struct General {
    pub grace_period: Option<u8>,

    pub page_fallback: Option<PathBuf>,

    pub log_remote_address: Option<bool>,
}

/// Full server configuration
diff --git a/src/settings/mod.rs b/src/settings/mod.rs
index dcb3707..4b793de 100644
--- a/src/settings/mod.rs
+++ b/src/settings/mod.rs
@@ -61,6 +61,7 @@ impl Settings {
        let mut threads_multiplier = opts.threads_multiplier;
        let mut grace_period = opts.grace_period;
        let mut page_fallback = opts.page_fallback;
        let mut log_remote_address = opts.log_remote_address;

        // Define the advanced file options
        let mut settings_advanced: Option<Advanced> = None;
@@ -145,6 +146,9 @@ impl Settings {
                    if let Some(v) = general.page_fallback {
                        page_fallback = Some(v)
                    }
                    if let Some(v) = general.log_remote_address {
                        log_remote_address = v
                    }
                }

                // Prepare the "advanced" options
@@ -206,6 +210,7 @@ impl Settings {
                threads_multiplier,
                grace_period,
                page_fallback,
                log_remote_address,

                // NOTE:
                // Windows-only options and commands
diff --git a/tests/toml/config.toml b/tests/toml/config.toml
index 51de796..47ff090 100644
--- a/tests/toml/config.toml
+++ b/tests/toml/config.toml
@@ -45,6 +45,19 @@ grace-period = 0
#### Page fallback for 404s
page-fallback = ""

#### Page fallback for 404s
page-fallback = ""

#### Log request Remote Address if available
log-remote-address = false


### Windows Only

#### Run the web server as a Windows Service
# windows-service = false


[advanced]

#### HTTP Headers customization
@@ -56,7 +69,7 @@ headers = { Access-Control-Allow-Origin = "*", X-XSS-PROTECTION = "1; mode=block

# #### b. Multiline version
[[advanced.headers]]
source = "index.html"
source = "/index.html"
[advanced.headers.headers]
Cache-Control = "public, max-age=36000"
Content-Security-Policy = "frame-ancestors 'self'"