|
|
|
@ -10,53 +10,53 @@ use std::str::FromStr; |
|
|
|
|
|
|
|
|
|
#[derive(Parser, Debug)] |
|
|
|
|
#[command(version)] |
|
|
|
|
#[command(about = "A domiply to another dimension")] |
|
|
|
|
#[command(about = "A domani to another dimension")] |
|
|
|
|
struct Cli { |
|
|
|
|
#[arg(
|
|
|
|
|
long, |
|
|
|
|
help = "OFF, ERROR, WARN, INFO, DEBUG, or TRACE", |
|
|
|
|
default_value_t = log::LevelFilter::Info, |
|
|
|
|
env = "DOMIPLY_LOG_LEVEL" |
|
|
|
|
env = "DOMANI_LOG_LEVEL" |
|
|
|
|
)] |
|
|
|
|
log_level: log::LevelFilter, |
|
|
|
|
|
|
|
|
|
#[arg(long, default_value_t = false, env = "DOMIPLY_LOG_TIMESTAMP")] |
|
|
|
|
#[arg(long, default_value_t = false, env = "DOMANI_LOG_TIMESTAMP")] |
|
|
|
|
log_timestamp: bool, |
|
|
|
|
|
|
|
|
|
#[arg(long, required = true, env = "DOMIPLY_HTTP_DOMAIN")] |
|
|
|
|
http_domain: domiply::domain::Name, |
|
|
|
|
#[arg(long, required = true, env = "DOMANI_HTTP_DOMAIN")] |
|
|
|
|
http_domain: domani::domain::Name, |
|
|
|
|
|
|
|
|
|
#[arg(long, default_value_t = SocketAddr::from_str("[::]:3030").unwrap(), env = "DOMIPLY_HTTP_LISTEN_ADDR")] |
|
|
|
|
#[arg(long, default_value_t = SocketAddr::from_str("[::]:3030").unwrap(), env = "DOMANI_HTTP_LISTEN_ADDR")] |
|
|
|
|
http_listen_addr: SocketAddr, |
|
|
|
|
|
|
|
|
|
#[arg(
|
|
|
|
|
long, |
|
|
|
|
help = "E.g. '[::]:443', if given then SSL certs will automatically be retrieved for all domains using LetsEncrypt", |
|
|
|
|
env = "DOMIPLY_HTTPS_LISTEN_ADDR", |
|
|
|
|
env = "DOMANI_HTTPS_LISTEN_ADDR", |
|
|
|
|
requires = "domain_acme_contact_email", |
|
|
|
|
requires = "domain_acme_store_dir_path" |
|
|
|
|
)] |
|
|
|
|
https_listen_addr: Option<SocketAddr>, |
|
|
|
|
|
|
|
|
|
#[arg(long, required = true, env = "DOMIPLY_PASSPHRASE")] |
|
|
|
|
#[arg(long, required = true, env = "DOMANI_PASSPHRASE")] |
|
|
|
|
passphrase: String, |
|
|
|
|
|
|
|
|
|
#[arg(long, required = true, env = "DOMIPLY_ORIGIN_STORE_GIT_DIR_PATH")] |
|
|
|
|
#[arg(long, required = true, env = "DOMANI_ORIGIN_STORE_GIT_DIR_PATH")] |
|
|
|
|
origin_store_git_dir_path: path::PathBuf, |
|
|
|
|
|
|
|
|
|
#[arg(long, required = true, env = "DOMIPLY_DOMAIN_CHECKER_TARGET_A")] |
|
|
|
|
#[arg(long, required = true, env = "DOMANI_DOMAIN_CHECKER_TARGET_A")] |
|
|
|
|
domain_checker_target_a: std::net::Ipv4Addr, |
|
|
|
|
|
|
|
|
|
#[arg(long, default_value_t = String::from("1.1.1.1:53"), env = "DOMIPLY_DOMAIN_CHECKER_RESOLVER_ADDR")] |
|
|
|
|
#[arg(long, default_value_t = String::from("1.1.1.1:53"), env = "DOMANI_DOMAIN_CHECKER_RESOLVER_ADDR")] |
|
|
|
|
domain_checker_resolver_addr: String, |
|
|
|
|
|
|
|
|
|
#[arg(long, required = true, env = "DOMIPLY_DOMAIN_CONFIG_STORE_DIR_PATH")] |
|
|
|
|
#[arg(long, required = true, env = "DOMANI_DOMAIN_CONFIG_STORE_DIR_PATH")] |
|
|
|
|
domain_config_store_dir_path: path::PathBuf, |
|
|
|
|
|
|
|
|
|
#[arg(long, env = "DOMIPLY_DOMAIN_ACME_STORE_DIR_PATH")] |
|
|
|
|
#[arg(long, env = "DOMANI_DOMAIN_ACME_STORE_DIR_PATH")] |
|
|
|
|
domain_acme_store_dir_path: Option<path::PathBuf>, |
|
|
|
|
|
|
|
|
|
#[arg(long, env = "DOMIPLY_DOMAIN_ACME_CONTACT_EMAIL")] |
|
|
|
|
#[arg(long, env = "DOMANI_DOMAIN_ACME_CONTACT_EMAIL")] |
|
|
|
|
domain_acme_contact_email: Option<String>, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -73,23 +73,23 @@ async fn main() { |
|
|
|
|
) |
|
|
|
|
.init(); |
|
|
|
|
|
|
|
|
|
let origin_store = domiply::origin::store::git::new(config.origin_store_git_dir_path) |
|
|
|
|
let origin_store = domani::origin::store::git::new(config.origin_store_git_dir_path) |
|
|
|
|
.expect("git origin store initialization failed"); |
|
|
|
|
|
|
|
|
|
let domain_checker = domiply::domain::checker::new( |
|
|
|
|
let domain_checker = domani::domain::checker::new( |
|
|
|
|
config.domain_checker_target_a, |
|
|
|
|
&config.domain_checker_resolver_addr, |
|
|
|
|
) |
|
|
|
|
.await |
|
|
|
|
.expect("domain checker initialization failed"); |
|
|
|
|
|
|
|
|
|
let domain_config_store = domiply::domain::config::new(&config.domain_config_store_dir_path) |
|
|
|
|
let domain_config_store = domani::domain::config::new(&config.domain_config_store_dir_path) |
|
|
|
|
.expect("domain config store initialization failed"); |
|
|
|
|
|
|
|
|
|
let domain_acme_manager = if config.https_listen_addr.is_some() { |
|
|
|
|
let domain_acme_store_dir_path = config.domain_acme_store_dir_path.unwrap(); |
|
|
|
|
|
|
|
|
|
let domain_acme_store = domiply::domain::acme::store::new(&domain_acme_store_dir_path) |
|
|
|
|
let domain_acme_store = domani::domain::acme::store::new(&domain_acme_store_dir_path) |
|
|
|
|
.expect("domain acme store initialization failed"); |
|
|
|
|
|
|
|
|
|
// if https_listen_addr is set then domain_acme_contact_email is required, see the Cli/clap
|
|
|
|
@ -97,7 +97,7 @@ async fn main() { |
|
|
|
|
let domain_acme_contact_email = config.domain_acme_contact_email.unwrap(); |
|
|
|
|
|
|
|
|
|
Some( |
|
|
|
|
domiply::domain::acme::manager::new(domain_acme_store, &domain_acme_contact_email) |
|
|
|
|
domani::domain::acme::manager::new(domain_acme_store, &domain_acme_contact_email) |
|
|
|
|
.await |
|
|
|
|
.expect("domain acme manager initialization failed"), |
|
|
|
|
) |
|
|
|
@ -105,9 +105,9 @@ async fn main() { |
|
|
|
|
None |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
let mut task_stack = domiply::util::TaskStack::new(); |
|
|
|
|
let mut task_stack = domani::util::TaskStack::new(); |
|
|
|
|
|
|
|
|
|
let domain_manager = domiply::domain::manager::new( |
|
|
|
|
let domain_manager = domani::domain::manager::new( |
|
|
|
|
&mut task_stack, |
|
|
|
|
origin_store, |
|
|
|
|
domain_config_store, |
|
|
|
@ -115,7 +115,7 @@ async fn main() { |
|
|
|
|
domain_acme_manager, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
let _ = domiply::service::http::new( |
|
|
|
|
let _ = domani::service::http::new( |
|
|
|
|
&mut task_stack, |
|
|
|
|
domain_manager.clone(), |
|
|
|
|
config.domain_checker_target_a, |
|
|
|
@ -124,7 +124,7 @@ async fn main() { |
|
|
|
|
config.http_domain.clone(), |
|
|
|
|
config |
|
|
|
|
.https_listen_addr |
|
|
|
|
.map(|listen_addr| domiply::service::http::HTTPSParams { |
|
|
|
|
.map(|listen_addr| domani::service::http::HTTPSParams { |
|
|
|
|
listen_addr, |
|
|
|
|
cert_resolver: domain_manager.clone(), |
|
|
|
|
}), |
|
|
|
|