Add support for environment files
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing

This commit is contained in:
Pierre HUBERT 2024-10-18 19:57:06 +02:00
parent 823783f307
commit f5f783698f
4 changed files with 30 additions and 0 deletions

View File

@ -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"

View File

@ -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"

View File

@ -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<String>,
/// Proxy IP, might end with a star "*"
#[clap(short, long, env)]
pub proxy_ip: Option<String>,
@ -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

View File

@ -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();