diff options
Diffstat (limited to 'src/config.rs')
-rw-r--r-- | src/config.rs | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/src/config.rs b/src/config.rs index 9350adf..547e853 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,35 +1,57 @@ -use std::net::IpAddr; +use std::{env, net::IpAddr, str::FromStr, fmt::Display}; #[derive(Clone)] pub struct Config { - fallback: IpAddr, - port: u16, + pub dns_fallback: IpAddr, + pub dns_port: u16, + pub dns_cache_size: u64, + + pub db_host: String, + pub db_port: u16, + pub db_user: String, + pub db_pass: String, + + pub web_user: String, + pub web_pass: String, + pub web_port: u16, } impl Config { pub fn new() -> Self { - let fallback = "9.9.9.9" - .parse::<IpAddr>() - .expect("Failed to create default ns fallback"); - Self { - fallback, - port: 2000, - } - } + let dns_port = Self::get_var::<u16>("WRAPPER_DNS_PORT", 53); + let dns_fallback = Self::get_var::<IpAddr>("WRAPPER_FALLBACK_DNS", [9, 9, 9, 9].into()); + let dns_cache_size = Self::get_var::<u64>("WRAPPER_CACHE_SIZE", 1000); - pub fn get_fallback_ns(&self) -> &IpAddr { - &self.fallback - } + let db_host = Self::get_var::<String>("WRAPPER_DB_HOST", String::from("localhost")); + let db_port = Self::get_var::<u16>("WRAPPER_DB_PORT", 27017); + let db_user = Self::get_var::<String>("WRAPPER_DB_USER", String::from("root")); + let db_pass = Self::get_var::<String>("WRAPPER_DB_PASS", String::from("")); - pub fn get_port(&self) -> u16 { - self.port - } + let web_user = Self::get_var::<String>("WRAPPER_WEB_USER", String::from("admin")); + let web_pass = Self::get_var::<String>("WRAPPER_WEB_PASS", String::from("wrapper")); + let web_port = Self::get_var::<u16>("WRAPPER_WEB_PORT", 80); + + Self { + dns_fallback, + dns_port, + dns_cache_size, - pub fn set_fallback_ns(&mut self, addr: &IpAddr) { - self.fallback = *addr; + db_host, + db_port, + db_user, + db_pass, + + web_user, + web_pass, + web_port, + } } - pub fn set_port(&mut self, port: u16) { - self.port = port; + fn get_var<T>(name: &str, default: T) -> T + where + T: FromStr + Display, + { + let env = env::var(name).unwrap_or(format!("{default}")); + env.parse::<T>().unwrap_or(default) } } |