summaryrefslogtreecommitdiff
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs64
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)
}
}