diff --git a/Cargo.lock b/Cargo.lock index 40d86d4..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", @@ -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..b4d7907 100644 --- a/peach-web/src/config.rs +++ b/peach-web/src/config.rs @@ -1,53 +1,31 @@ //! 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 ENV_VARS: [&str; 4] = ["STANDALONE_MODE", "DISABLE_AUTH", "ADDR", "PORT"]; - -pub struct Config { +pub struct ServerConfig { pub standalone_mode: bool, pub disable_auth: bool, pub addr: String, pub port: String, } -impl Default for Config { - fn default() -> Self { - Self { - standalone_mode: true, - disable_auth: false, - addr: "127.0.0.1".to_string(), - port: "8000".to_string(), - } - } -} - -impl Config { - pub fn new() -> Config { +impl ServerConfig { + pub fn new() -> Result { // define default config values - let mut config = Config::default(); + 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")?, + port: get_config_value("PORT")?, + }; - // check for the environment variables in our config - for key in ENV_VARS { - // if a variable (key) has been set, check the value - if let Ok(val) = env::var(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 b43d669..868496d 100644 --- a/peach-web/src/main.rs +++ b/peach-web/src/main.rs @@ -29,12 +29,13 @@ use lazy_static::lazy_static; use log::info; // crate-local dependencies -use config::Config; +use config::ServerConfig; use utils::theme::Theme; // load the application configuration and create the theme switcher lazy_static! { - static ref CONFIG: Config = Config::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); } @@ -51,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!("{}:{}", CONFIG.addr, 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 @@ -67,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 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 c49218d..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, 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 !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" }