|
|
|
@ -1,8 +1,8 @@ |
|
|
|
|
use crate::domain::{self, acme, checker, config, gemini, store, tls}; |
|
|
|
|
use crate::domain::{self, acme, checker, gemini, store, tls}; |
|
|
|
|
use crate::error::unexpected::{self, Mappable}; |
|
|
|
|
use crate::{origin, task_stack, util}; |
|
|
|
|
|
|
|
|
|
use std::{collections, sync}; |
|
|
|
|
use std::sync; |
|
|
|
|
use tokio_util::sync::CancellationToken; |
|
|
|
|
|
|
|
|
|
pub enum GetSettingsResult { |
|
|
|
@ -153,8 +153,7 @@ pub struct ManagerImpl { |
|
|
|
|
domain_checker: checker::DNSChecker, |
|
|
|
|
acme_manager: Option<Box<dyn acme::manager::Manager + Send + Sync>>, |
|
|
|
|
gemini_store: Option<Box<dyn gemini::Store + Send + Sync>>, |
|
|
|
|
builtins: collections::HashMap<domain::Name, config::ConfigBuiltinDomain>, |
|
|
|
|
proxied: collections::HashMap<domain::Name, config::ConfigProxiedDomain>, |
|
|
|
|
config: domain::Config, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
impl ManagerImpl { |
|
|
|
@ -170,8 +169,7 @@ impl ManagerImpl { |
|
|
|
|
domain_checker: checker::DNSChecker, |
|
|
|
|
acme_manager: Option<AcmeManager>, |
|
|
|
|
gemini_store: Option<GeminiStore>, |
|
|
|
|
builtins: collections::HashMap<domain::Name, config::ConfigBuiltinDomain>, |
|
|
|
|
proxied: collections::HashMap<domain::Name, config::ConfigProxiedDomain>, |
|
|
|
|
config: domain::Config, |
|
|
|
|
) -> sync::Arc<Self> { |
|
|
|
|
let manager = sync::Arc::new(ManagerImpl { |
|
|
|
|
origin_store: Box::from(origin_store), |
|
|
|
@ -180,8 +178,7 @@ impl ManagerImpl { |
|
|
|
|
acme_manager: acme_manager |
|
|
|
|
.map(|m| Box::new(m) as Box<dyn acme::manager::Manager + Send + Sync>), |
|
|
|
|
gemini_store: gemini_store.map(|m| Box::new(m) as Box<dyn gemini::Store + Send + Sync>), |
|
|
|
|
builtins, |
|
|
|
|
proxied, |
|
|
|
|
config, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
task_stack.push_spawn(|canceller| { |
|
|
|
@ -289,11 +286,11 @@ impl ManagerImpl { |
|
|
|
|
|
|
|
|
|
impl Manager for ManagerImpl { |
|
|
|
|
fn get_settings(&self, domain: &domain::Name) -> Result<GetSettingsResult, GetSettingsError> { |
|
|
|
|
if let Some(config) = self.builtins.get(domain) { |
|
|
|
|
if let Some(config) = self.config.builtin_domains.get(domain) { |
|
|
|
|
return Ok(GetSettingsResult::Builtin(config.clone())); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if let Some(config) = self.proxied.get(domain) { |
|
|
|
|
if let Some(config) = self.config.proxied_domains.get(domain) { |
|
|
|
|
return Ok(GetSettingsResult::Proxied(config.clone())); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -330,7 +327,10 @@ impl Manager for ManagerImpl { |
|
|
|
|
settings: domain::Settings, |
|
|
|
|
) -> util::BoxFuture<'mgr, Result<(), SyncWithSettingsError>> { |
|
|
|
|
Box::pin(async move { |
|
|
|
|
if self.builtins.contains_key(&domain) || self.proxied.contains_key(&domain) { |
|
|
|
|
let is_builtin = self.config.builtin_domains.contains_key(&domain); |
|
|
|
|
let is_proxied = self.config.proxied_domains.contains_key(&domain); |
|
|
|
|
|
|
|
|
|
if is_builtin || is_proxied { |
|
|
|
|
return Err(SyncWithSettingsError::NotModifiable); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -384,7 +384,8 @@ impl Manager for ManagerImpl { |
|
|
|
|
}) |
|
|
|
|
.collect(); |
|
|
|
|
|
|
|
|
|
self.builtins |
|
|
|
|
self.config |
|
|
|
|
.builtin_domains |
|
|
|
|
.iter() |
|
|
|
|
.map(|(domain, config)| ManagedDomain { |
|
|
|
|
domain: domain.clone(), |
|
|
|
@ -392,7 +393,8 @@ impl Manager for ManagerImpl { |
|
|
|
|
}) |
|
|
|
|
.collect_into(&mut res); |
|
|
|
|
|
|
|
|
|
self.proxied |
|
|
|
|
self.config |
|
|
|
|
.proxied_domains |
|
|
|
|
.iter() |
|
|
|
|
.map(|(domain, _)| ManagedDomain { |
|
|
|
|
domain: domain.clone(), |
|
|
|
|