From 288941e8a3c96bfcee858cffb71583a395909505 Mon Sep 17 00:00:00 2001 From: notplants Date: Thu, 12 May 2022 11:26:23 +0200 Subject: [PATCH 1/4] Change Rouille to use get_config_value --- Cargo.lock | 2 +- peach-config/Cargo.toml | 2 +- peach-lib/src/config_manager.rs | 2 +- peach-web/src/config.rs | 17 +++++++++-------- peach-web/src/main.rs | 8 ++++---- peach-web/src/routes/settings/menu.rs | 4 ++-- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 40d86d4..02a0593 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2386,7 +2386,7 @@ dependencies = [ [[package]] name = "peach-config" -version = "0.1.23" +version = "0.1.24" dependencies = [ "clap", "env_logger 0.6.2", diff --git a/peach-config/Cargo.toml b/peach-config/Cargo.toml index 679d4d9..d51afdb 100644 --- a/peach-config/Cargo.toml +++ b/peach-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "peach-config" -version = "0.1.23" +version = "0.1.24" authors = ["Andrew Reid ", "Max Fowler "] edition = "2018" description = "Command line tool for installing, updating and configuring PeachCloud" diff --git a/peach-lib/src/config_manager.rs b/peach-lib/src/config_manager.rs index 840b11b..a3213f6 100644 --- a/peach-lib/src/config_manager.rs +++ b/peach-lib/src/config_manager.rs @@ -57,7 +57,7 @@ pub fn get_peach_config_defaults() -> HashMap { ("DYN_NAMESERVER", "ns.peachcloud.org"), ("DYN_ENABLED", "false"), ("SSB_ADMIN_IDS", ""), - ("ADMIN_PASSWORD_HASH", "146"), + ("ADMIN_PASSWORD_HASH", "47"), ("TEMPORARY_PASSWORD_HASH", ""), ("GO_SBOT_DATADIR", ""), ("PEACH_CONFIGDIR", "/var/lib/peachcloud"), diff --git a/peach-web/src/config.rs b/peach-web/src/config.rs index b1c2e95..385404b 100644 --- a/peach-web/src/config.rs +++ b/peach-web/src/config.rs @@ -4,18 +4,19 @@ //! variables have been set. use std::env; +use peach_lib::config_manager::get_config_value; // environment variable keys to check for -const ENV_VARS: [&str; 4] = ["STANDALONE_MODE", "DISABLE_AUTH", "ADDR", "PORT"]; +const CONFIG_KEYS: [&str; 4] = ["STANDALONE_MODE", "DISABLE_AUTH", "ADDR", "PORT"]; -pub struct Config { +pub struct RouilleConfig { pub standalone_mode: bool, pub disable_auth: bool, pub addr: String, pub port: String, } -impl Default for Config { +impl Default for RouilleConfig { fn default() -> Self { Self { standalone_mode: true, @@ -26,15 +27,15 @@ impl Default for Config { } } -impl Config { - pub fn new() -> Config { +impl RouilleConfig { + pub fn new() -> RouilleConfig { // define default config values - let mut config = Config::default(); + let mut config = RouilleConfig::default(); // check for the environment variables in our config - for key in ENV_VARS { + for key in CONFIG_KEYS { // if a variable (key) has been set, check the value - if let Ok(val) = env::var(key) { + if let Ok(val) = get_config_value(key) { // if the value is of the correct type, update the config value match key { "STANDALONE_MODE" if val.as_str() == "true" => config.standalone_mode = true, diff --git a/peach-web/src/main.rs b/peach-web/src/main.rs index b43d669..ee2f1de 100644 --- a/peach-web/src/main.rs +++ b/peach-web/src/main.rs @@ -29,12 +29,12 @@ use lazy_static::lazy_static; use log::info; // crate-local dependencies -use config::Config; +use config::RouilleConfig; use utils::theme::Theme; // load the application configuration and create the theme switcher lazy_static! { - static ref CONFIG: Config = Config::new(); + static ref ROUILLE_CONFIG: RouilleConfig = RouilleConfig::new(); static ref THEME: RwLock = RwLock::new(Theme::Light); } @@ -51,7 +51,7 @@ fn main() { // set ip address / hostname and port for the webserver // defaults to "127.0.0.1:8000" - let addr_and_port = format!("{}:{}", CONFIG.addr, CONFIG.port); + let addr_and_port = format!("{}:{}", ROUILLE_CONFIG.addr, ROUILLE_CONFIG.port); // store the session data for each session and a hashmap that associates // each session id with the data @@ -67,7 +67,7 @@ fn main() { // with a name of "SID" and a duration of one hour (3600 seconds) rouille::session::session(request, "SID", 3600, |session| { // if the "DISABLE_AUTH" env var is true, authenticate the session - let mut session_data = if CONFIG.disable_auth { + let mut session_data = if ROUILLE_CONFIG.disable_auth { Some(SessionData { _login: "success".to_string(), }) diff --git a/peach-web/src/routes/settings/menu.rs b/peach-web/src/routes/settings/menu.rs index c49218d..6745263 100644 --- a/peach-web/src/routes/settings/menu.rs +++ b/peach-web/src/routes/settings/menu.rs @@ -1,6 +1,6 @@ use maud::{html, PreEscaped}; -use crate::{templates, utils::theme, CONFIG}; +use crate::{templates, utils::theme, ROUILLE_CONFIG}; // ROUTE: /settings @@ -12,7 +12,7 @@ pub fn build_template() -> PreEscaped { (PreEscaped("")) div id="settingsButtons" { // render the network settings button if we're not in standalone mode - @if !CONFIG.standalone_mode { + @if !ROUILLE_CONFIG.standalone_mode { a id="network" class="button button-primary center" href="/settings/network" title="Network Settings" { "Network" } } a id="scuttlebutt" class="button button-primary center" href="/settings/scuttlebutt" title="Scuttlebutt Settings" { "Scuttlebutt" } From e041e1c7f9f685ab2eded86f41584f0518e4ff3e Mon Sep 17 00:00:00 2001 From: notplants Date: Thu, 12 May 2022 11:55:59 +0200 Subject: [PATCH 2/4] Change defaults to only be defined in config_manager.rs --- peach-web/src/config.rs | 51 +++++++++++------------------------------ peach-web/src/main.rs | 3 ++- 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/peach-web/src/config.rs b/peach-web/src/config.rs index 385404b..bc851f5 100644 --- a/peach-web/src/config.rs +++ b/peach-web/src/config.rs @@ -1,14 +1,14 @@ //! Define the configuration parameters for the web application. //! -//! Sets default values and updates them if the corresponding environment -//! variables have been set. +//! These configs are loaded using peach-lib::config_manager which checks config keys from +//! three sources: +//! 1. from environmental variables +//! 2. from a configuration file +//! 3. from default values -use std::env; +use crate::error::PeachWebError; use peach_lib::config_manager::get_config_value; -// environment variable keys to check for -const CONFIG_KEYS: [&str; 4] = ["STANDALONE_MODE", "DISABLE_AUTH", "ADDR", "PORT"]; - pub struct RouilleConfig { pub standalone_mode: bool, pub disable_auth: bool, @@ -16,39 +16,16 @@ pub struct RouilleConfig { pub port: String, } -impl Default for RouilleConfig { - fn default() -> Self { - Self { - standalone_mode: true, - disable_auth: false, - addr: "127.0.0.1".to_string(), - port: "8000".to_string(), - } - } -} - impl RouilleConfig { - pub fn new() -> RouilleConfig { + pub fn new() -> Result { // define default config values - let mut config = RouilleConfig::default(); + let config = RouilleConfig { + standalone_mode: get_config_value("STANDALONE_MODE")?.as_str() == "true", + disable_auth: get_config_value("DISABLE_AUTH")?.as_str() == "true", + addr: get_config_value("ADDR")?, + port: get_config_value("PORT")?, + }; - // check for the environment variables in our config - for key in CONFIG_KEYS { - // if a variable (key) has been set, check the value - if let Ok(val) = get_config_value(key) { - // if the value is of the correct type, update the config value - match key { - "STANDALONE_MODE" if val.as_str() == "true" => config.standalone_mode = true, - "STANDALONE_MODE" if val.as_str() == "false" => config.standalone_mode = false, - "DISABLE_AUTH" if val.as_str() == "true" => config.disable_auth = true, - "DISABLE_AUTH" if val.as_str() == "false" => config.disable_auth = false, - "ADDR" => config.addr = val, - "PORT" => config.port = val, - _ => (), - } - } - } - - config + Ok(config) } } diff --git a/peach-web/src/main.rs b/peach-web/src/main.rs index ee2f1de..72de356 100644 --- a/peach-web/src/main.rs +++ b/peach-web/src/main.rs @@ -34,7 +34,8 @@ use utils::theme::Theme; // load the application configuration and create the theme switcher lazy_static! { - static ref ROUILLE_CONFIG: RouilleConfig = RouilleConfig::new(); + static ref ROUILLE_CONFIG: RouilleConfig = RouilleConfig::new() + .expect("Failed to load rouille configuration values on server startup"); static ref THEME: RwLock = RwLock::new(Theme::Light); } From 99fd3be4ad775570a12661769b93f298c8846e73 Mon Sep 17 00:00:00 2001 From: notplants Date: Thu, 12 May 2022 12:21:05 +0200 Subject: [PATCH 3/4] Change RouilleConfig to ServerConfig --- peach-web/src/config.rs | 8 ++++---- peach-web/src/main.rs | 8 ++++---- peach-web/src/routes/settings/menu.rs | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/peach-web/src/config.rs b/peach-web/src/config.rs index bc851f5..b4d7907 100644 --- a/peach-web/src/config.rs +++ b/peach-web/src/config.rs @@ -9,17 +9,17 @@ use crate::error::PeachWebError; use peach_lib::config_manager::get_config_value; -pub struct RouilleConfig { +pub struct ServerConfig { pub standalone_mode: bool, pub disable_auth: bool, pub addr: String, pub port: String, } -impl RouilleConfig { - pub fn new() -> Result { +impl ServerConfig { + pub fn new() -> Result { // define default config values - let config = RouilleConfig { + let config = ServerConfig { standalone_mode: get_config_value("STANDALONE_MODE")?.as_str() == "true", disable_auth: get_config_value("DISABLE_AUTH")?.as_str() == "true", addr: get_config_value("ADDR")?, diff --git a/peach-web/src/main.rs b/peach-web/src/main.rs index 72de356..b624615 100644 --- a/peach-web/src/main.rs +++ b/peach-web/src/main.rs @@ -29,12 +29,12 @@ use lazy_static::lazy_static; use log::info; // crate-local dependencies -use config::RouilleConfig; +use config::ServerConfig; use utils::theme::Theme; // load the application configuration and create the theme switcher lazy_static! { - static ref ROUILLE_CONFIG: RouilleConfig = RouilleConfig::new() + static ref SERVER_CONFIG: ServerConfig = ServerConfig::new() .expect("Failed to load rouille configuration values on server startup"); static ref THEME: RwLock = RwLock::new(Theme::Light); } @@ -52,7 +52,7 @@ fn main() { // set ip address / hostname and port for the webserver // defaults to "127.0.0.1:8000" - let addr_and_port = format!("{}:{}", ROUILLE_CONFIG.addr, ROUILLE_CONFIG.port); + let addr_and_port = format!("{}:{}", SERVER_CONFIG.addr, SERVER_CONFIG.port); // store the session data for each session and a hashmap that associates // each session id with the data @@ -68,7 +68,7 @@ fn main() { // with a name of "SID" and a duration of one hour (3600 seconds) rouille::session::session(request, "SID", 3600, |session| { // if the "DISABLE_AUTH" env var is true, authenticate the session - let mut session_data = if ROUILLE_CONFIG.disable_auth { + let mut session_data = if SERVER_CONFIG.disable_auth { Some(SessionData { _login: "success".to_string(), }) diff --git a/peach-web/src/routes/settings/menu.rs b/peach-web/src/routes/settings/menu.rs index 6745263..ad122b5 100644 --- a/peach-web/src/routes/settings/menu.rs +++ b/peach-web/src/routes/settings/menu.rs @@ -1,6 +1,6 @@ use maud::{html, PreEscaped}; -use crate::{templates, utils::theme, ROUILLE_CONFIG}; +use crate::{templates, utils::theme, SERVER_CONFIG}; // ROUTE: /settings @@ -12,7 +12,7 @@ pub fn build_template() -> PreEscaped { (PreEscaped("")) div id="settingsButtons" { // render the network settings button if we're not in standalone mode - @if !ROUILLE_CONFIG.standalone_mode { + @if !SERVER_CONFIG.standalone_mode { a id="network" class="button button-primary center" href="/settings/network" title="Network Settings" { "Network" } } a id="scuttlebutt" class="button button-primary center" href="/settings/scuttlebutt" title="Scuttlebutt Settings" { "Scuttlebutt" } From 5ea6a8670039909d879b6ac4a89bc0017820271b Mon Sep 17 00:00:00 2001 From: notplants Date: Thu, 12 May 2022 12:24:17 +0200 Subject: [PATCH 4/4] Fix clippy error --- Cargo.lock | 2 +- peach-web/src/main.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 02a0593..6585640 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1111,7 +1111,7 @@ dependencies = [ [[package]] name = "golgi" version = "0.1.1" -source = "git+https://git.coopcloud.tech/golgi-ssb/golgi#77dd75bcd4649b7487069a61e2a8069b49f60a1d" +source = "git+https://git.coopcloud.tech/golgi-ssb/golgi.git#77dd75bcd4649b7487069a61e2a8069b49f60a1d" dependencies = [ "async-std", "async-stream 0.3.3", diff --git a/peach-web/src/main.rs b/peach-web/src/main.rs index b624615..868496d 100644 --- a/peach-web/src/main.rs +++ b/peach-web/src/main.rs @@ -34,8 +34,8 @@ use utils::theme::Theme; // load the application configuration and create the theme switcher lazy_static! { - static ref SERVER_CONFIG: ServerConfig = ServerConfig::new() - .expect("Failed to load rouille configuration values on server startup"); + static ref SERVER_CONFIG: ServerConfig = + ServerConfig::new().expect("Failed to load rouille configuration values on server startup"); static ref THEME: RwLock = RwLock::new(Theme::Light); }