diff --git a/central_backend/Cargo.lock b/central_backend/Cargo.lock index 24072ca..71c7387 100644 --- a/central_backend/Cargo.lock +++ b/central_backend/Cargo.lock @@ -670,6 +670,7 @@ dependencies = [ "bincode", "chrono", "clap", + "dotenvy", "env_logger", "foreign-types-shared", "fs4", @@ -997,6 +998,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "encode_unicode" version = "1.0.0" diff --git a/central_backend/Cargo.toml b/central_backend/Cargo.toml index 5d025ab..a0eff3a 100644 --- a/central_backend/Cargo.toml +++ b/central_backend/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" log = "0.4.22" env_logger = "0.11.5" lazy_static = "1.5.0" +dotenvy = "0.15.7" clap = { version = "4.5.20", features = ["derive", "env"] } anyhow = "1.0.89" thiserror = "1.0.64" diff --git a/central_backend/src/app_config.rs b/central_backend/src/app_config.rs index 705429b..242f02e 100644 --- a/central_backend/src/app_config.rs +++ b/central_backend/src/app_config.rs @@ -48,6 +48,10 @@ pub enum ConsumptionBackend { #[derive(Parser, Debug)] #[command(version, about, long_about = None)] pub struct AppConfig { + /// Read arguments from env file + #[clap(short, long, env)] + pub config: Option, + /// Proxy IP, might end with a star "*" #[clap(short, long, env)] pub proxy_ip: Option, @@ -114,6 +118,21 @@ lazy_static::lazy_static! { } impl AppConfig { + /// Parse environment variables from file, if requedst + pub fn parse_env_file() -> anyhow::Result<()> { + if let Some(c) = Self::parse().config { + log::info!("Load additional environment variables from {c}"); + let conf_file = Path::new(&c); + + if !conf_file.is_file() { + panic!("Specified configuration is not a file!"); + } + dotenvy::from_path(conf_file)?; + } + + Ok(()) + } + /// Get parsed command line arguments pub fn get() -> &'static AppConfig { &ARGS diff --git a/central_backend/src/main.rs b/central_backend/src/main.rs index e847194..4cd9b55 100644 --- a/central_backend/src/main.rs +++ b/central_backend/src/main.rs @@ -9,6 +9,9 @@ use tokio_schedule::{every, Job}; #[actix_web::main] async fn main() -> std::io::Result<()> { + // Load additional config from file, if requested + AppConfig::parse_env_file().expect("Failed to parse environment file!"); + // Initialize OpenSSL openssl_sys::init();