use anyhow::{bail, Result}; use debug_ignore::DebugIgnore; use envconfig::Envconfig; use lazy_static::lazy_static; use url::Url; #[derive(Envconfig, Debug)] pub struct Config { #[envconfig(from = "PAGES_DB_URL")] pub db_url: DebugIgnore, #[envconfig(from = "PAGES_AMQP_URL")] pub amqp_url: DebugIgnore, #[envconfig(from = "PAGES_USER")] pub user: String, #[envconfig(from = "PAGES_PASSWORD")] pub password: DebugIgnore, #[envconfig(from = "PAGES_GITEA_URL")] pub gitea_url: String, #[envconfig(from = "PAGES_GITEA_API_TOKEN")] pub gitea_api_token: DebugIgnore, #[envconfig(from = "PAGES_GITEA_SECRET")] pub gitea_secret: DebugIgnore, #[envconfig(from = "PAGES_GITEA_PULL_URL")] pub gitea_pull_url: Url, #[envconfig(from = "PAGES_GITEA_PULL_BRANCH")] pub gitea_pull_branch: String, #[envconfig(from = "PAGES_NGINX_CONFIG_DIR")] pub nginx_config_dir: String, #[envconfig(from = "PAGES_REPOS_DIR")] pub repos_dir: String, #[envconfig(from = "PAGES_DOMAIN")] pub domain: String, } pub const PASSWORD_MIN_LEN: usize = 64; impl Config { pub fn validate(&self) -> Result<()> { if self.password.len() < PASSWORD_MIN_LEN { bail!( "Password is too short: {} < {}", self.password.len(), PASSWORD_MIN_LEN ); } Ok(()) } } #[derive(Debug)] pub struct DynConfig { pub cloudflare_zone_name: String, } lazy_static! { pub static ref CONFIG: Config = Config::init_from_env().unwrap(); }