index : static-web-server.git

ascending towards madness

author Jose Quintana <joseluisquintana20@gmail.com> 2022-04-26 22:42:47.0 +00:00:00
committer Jose Quintana <joseluisquintana20@gmail.com> 2022-04-26 22:42:47.0 +00:00:00
commit
eb540e554f0997a95f0068ed750e6e8f81a47938 [patch]
tree
c3c11ea5e78e0dfec528f2d0b27dd1ccaa28e47a
parent
31bb70a13c818939aa51b079a9312acf5876767d
download
eb540e554f0997a95f0068ed750e6e8f81a47938.tar.gz

chore: optional `[general]` and `[advanced]` sections



Diff

 src/settings/file.rs   |   4 +-
 src/settings/mod.rs    | 130 +++++++++++++++++++++++++-------------------------
 tests/toml/config.toml |  36 +++++++-------
 3 files changed, 86 insertions(+), 84 deletions(-)

diff --git a/src/settings/file.rs b/src/settings/file.rs
index 27d0f6e..48f1dee 100644
--- a/src/settings/file.rs
+++ b/src/settings/file.rs
@@ -102,8 +102,8 @@ pub struct General {
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "kebab-case")]
pub struct Settings {
    pub general: General,
    pub advanced: Advanced,
    pub general: Option<General>,
    pub advanced: Option<Advanced>,
}

impl Settings {
diff --git a/src/settings/mod.rs b/src/settings/mod.rs
index 13944b9..24b6827 100644
--- a/src/settings/mod.rs
+++ b/src/settings/mod.rs
@@ -56,76 +56,78 @@ impl Settings {
                    .canonicalize()
                    .with_context(|| "error resolving toml config file path")?;

                let file::Settings{ general, advanced } = file::Settings::read(&path_resolved)
                let settings = file::Settings::read(&path_resolved)
                    .with_context(|| {"can not read toml config file because has invalid or unsupported format/options" })?;

                config_file = Some(path_resolved);

                if let Some(ref v) = general.host {
                    host = v.to_owned()
                }
                if let Some(v) = general.port {
                    port = v
                }
                if let Some(ref v) = general.root {
                    root = v.to_owned()
                }
                if let Some(ref v) = general.log_level {
                    log_level = v.name().to_lowercase();
                }
                if let Some(v) = general.cache_control_headers {
                    cache_control_headers = v
                }
                if let Some(v) = general.compression {
                    compression = v
                }
                if let Some(ref v) = general.page404 {
                    page404 = v.to_owned()
                }
                if let Some(ref v) = general.page50x {
                    page50x = v.to_owned()
                }
                if let Some(v) = general.http2 {
                    http2 = v
                }
                if let Some(ref v) = general.http2_tls_cert {
                    http2_tls_cert = v.to_owned()
                }
                if let Some(ref v) = general.http2_tls_key {
                    http2_tls_key = v.to_owned()
                }
                if let Some(v) = general.security_headers {
                    security_headers = v
                }
                if let Some(ref v) = general.cors_allow_origins {
                    cors_allow_origins = v.to_owned()
                }
                if let Some(ref v) = general.cors_allow_headers {
                    cors_allow_headers = v.to_owned()
                }
                if let Some(v) = general.directory_listing {
                    directory_listing = v
                }
                if let Some(v) = general.directory_listing_order {
                    directory_listing_order = v
                }
                if let Some(ref v) = general.basic_auth {
                    basic_auth = v.to_owned()
                }
                if let Some(v) = general.fd {
                    fd = Some(v)
                }
                if let Some(v) = general.threads_multiplier {
                    threads_multiplier = v
                }
                if let Some(v) = general.grace_period {
                    grace_period = v
                }
                if let Some(ref v) = general.page_fallback {
                    page_fallback = v.to_owned()
                if let Some(general) = settings.general {
                    if let Some(ref v) = general.host {
                        host = v.to_owned()
                    }
                    if let Some(v) = general.port {
                        port = v
                    }
                    if let Some(ref v) = general.root {
                        root = v.to_owned()
                    }
                    if let Some(ref v) = general.log_level {
                        log_level = v.name().to_lowercase();
                    }
                    if let Some(v) = general.cache_control_headers {
                        cache_control_headers = v
                    }
                    if let Some(v) = general.compression {
                        compression = v
                    }
                    if let Some(ref v) = general.page404 {
                        page404 = v.to_owned()
                    }
                    if let Some(ref v) = general.page50x {
                        page50x = v.to_owned()
                    }
                    if let Some(v) = general.http2 {
                        http2 = v
                    }
                    if let Some(ref v) = general.http2_tls_cert {
                        http2_tls_cert = v.to_owned()
                    }
                    if let Some(ref v) = general.http2_tls_key {
                        http2_tls_key = v.to_owned()
                    }
                    if let Some(v) = general.security_headers {
                        security_headers = v
                    }
                    if let Some(ref v) = general.cors_allow_origins {
                        cors_allow_origins = v.to_owned()
                    }
                    if let Some(ref v) = general.cors_allow_headers {
                        cors_allow_headers = v.to_owned()
                    }
                    if let Some(v) = general.directory_listing {
                        directory_listing = v
                    }
                    if let Some(v) = general.directory_listing_order {
                        directory_listing_order = v
                    }
                    if let Some(ref v) = general.basic_auth {
                        basic_auth = v.to_owned()
                    }
                    if let Some(v) = general.fd {
                        fd = Some(v)
                    }
                    if let Some(v) = general.threads_multiplier {
                        threads_multiplier = v
                    }
                    if let Some(v) = general.grace_period {
                        grace_period = v
                    }
                    if let Some(ref v) = general.page_fallback {
                        page_fallback = v.to_owned()
                    }
                }

                settings_advanced = Some(advanced)
                settings_advanced = settings.advanced
            }
        }

diff --git a/tests/toml/config.toml b/tests/toml/config.toml
index 3eb3915..71afae2 100644
--- a/tests/toml/config.toml
+++ b/tests/toml/config.toml
@@ -1,49 +1,49 @@
[general]

#### Address & Root dir
# host = "::"
# port = 80
# root = "./public"
host = "::"
port = 8087
root = "docker/public"

#### Logging
log-level = "debug"

# Cache Control headers
# cache-control-headers = true
#### Cache Control headers
cache-control-headers = true

#### Auto Compression
# compression = true
compression = true

#### Error pages
# page404 = "404.html"
# page50x = "50x.html"
page404 = "docker/public/404.html"
page50x = "docker/public/50x.html"

#### HTTP/2 + TLS
# http2 = true
# http2-tls-cert = ""
# http2-tls-key = ""
http2 = false
http2-tls-cert = ""
http2-tls-key = ""

#### CORS & Security headers
# security-headers = true
# cors-allow-origins = ""
security-headers = true
cors-allow-origins = ""

#### Directoy listing
# directory-listing = false
directory-listing = false

#### Basich Authentication
# basic-auth = ""
basic-auth = ""

#### File descriptor binding
# fd = ""

#### Worker threads
# threads-multiplier = 1
threads-multiplier = 1

#### Grace period after a graceful shutdown
# grace-period = 0
grace-period = 0

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

[advanced]