Ensure that the interface_domain gets a cert requested for it
This commit is contained in:
parent
818c728258
commit
92f7d3d52a
@ -9,6 +9,7 @@ pub enum GetSettingsResult {
|
|||||||
Stored(domain::Settings),
|
Stored(domain::Settings),
|
||||||
Builtin(domain::config::ConfigBuiltinDomain),
|
Builtin(domain::config::ConfigBuiltinDomain),
|
||||||
Proxied(domain::config::ConfigProxiedDomain),
|
Proxied(domain::config::ConfigProxiedDomain),
|
||||||
|
Interface,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(thiserror::Error, Debug)]
|
#[derive(thiserror::Error, Debug)]
|
||||||
@ -244,6 +245,8 @@ impl ManagerImpl {
|
|||||||
// A proxied domain never needs gemini certs, since gemini requests will be
|
// A proxied domain never needs gemini certs, since gemini requests will be
|
||||||
// transparently proxied to the backing server anyway.
|
// transparently proxied to the backing server anyway.
|
||||||
GetSettingsResult::Proxied(config) => (None, !config.https_disabled, false),
|
GetSettingsResult::Proxied(config) => (None, !config.https_disabled, false),
|
||||||
|
|
||||||
|
GetSettingsResult::Interface => (None, true, false),
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(settings) = settings {
|
if let Some(settings) = settings {
|
||||||
@ -286,6 +289,10 @@ impl ManagerImpl {
|
|||||||
|
|
||||||
impl Manager for ManagerImpl {
|
impl Manager for ManagerImpl {
|
||||||
fn get_settings(&self, domain: &domain::Name) -> Result<GetSettingsResult, GetSettingsError> {
|
fn get_settings(&self, domain: &domain::Name) -> Result<GetSettingsResult, GetSettingsError> {
|
||||||
|
if Some(domain) == self.config.interface_domain.as_ref() {
|
||||||
|
return Ok(GetSettingsResult::Interface);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(config) = self.config.builtin_domains.get(domain) {
|
if let Some(config) = self.config.builtin_domains.get(domain) {
|
||||||
return Ok(GetSettingsResult::Builtin(config.clone()));
|
return Ok(GetSettingsResult::Builtin(config.clone()));
|
||||||
}
|
}
|
||||||
@ -310,6 +317,11 @@ impl Manager for ManagerImpl {
|
|||||||
unexpected::Error::from("can't call get_file on proxied domain").into(),
|
unexpected::Error::from("can't call get_file on proxied domain").into(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
GetSettingsResult::Interface => {
|
||||||
|
return Err(
|
||||||
|
unexpected::Error::from("can't call get_file on interface domain").into(),
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let path = settings.process_path(path);
|
let path = settings.process_path(path);
|
||||||
@ -327,10 +339,11 @@ impl Manager for ManagerImpl {
|
|||||||
settings: domain::Settings,
|
settings: domain::Settings,
|
||||||
) -> util::BoxFuture<'mgr, Result<(), SyncWithSettingsError>> {
|
) -> util::BoxFuture<'mgr, Result<(), SyncWithSettingsError>> {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
|
let is_interface = Some(&domain) == self.config.interface_domain.as_ref();
|
||||||
let is_builtin = self.config.builtin_domains.contains_key(&domain);
|
let is_builtin = self.config.builtin_domains.contains_key(&domain);
|
||||||
let is_proxied = self.config.proxied_domains.contains_key(&domain);
|
let is_proxied = self.config.proxied_domains.contains_key(&domain);
|
||||||
|
|
||||||
if is_builtin || is_proxied {
|
if is_interface || is_builtin || is_proxied {
|
||||||
return Err(SyncWithSettingsError::NotModifiable);
|
return Err(SyncWithSettingsError::NotModifiable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,6 +415,13 @@ impl Manager for ManagerImpl {
|
|||||||
})
|
})
|
||||||
.collect_into(&mut res);
|
.collect_into(&mut res);
|
||||||
|
|
||||||
|
if let Some(ref interface_domain) = self.config.interface_domain {
|
||||||
|
res.push(ManagedDomain {
|
||||||
|
domain: interface_domain.clone(),
|
||||||
|
public: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,6 +227,7 @@ impl Service {
|
|||||||
config.public.then(|| config.settings)
|
config.public.then(|| config.settings)
|
||||||
}
|
}
|
||||||
Ok(domain::manager::GetSettingsResult::Proxied(_)) => None,
|
Ok(domain::manager::GetSettingsResult::Proxied(_)) => None,
|
||||||
|
Ok(domain::manager::GetSettingsResult::Interface) => None,
|
||||||
Err(domain::manager::GetSettingsError::NotFound) => None,
|
Err(domain::manager::GetSettingsError::NotFound) => None,
|
||||||
Err(domain::manager::GetSettingsError::Unexpected(e)) => {
|
Err(domain::manager::GetSettingsError::Unexpected(e)) => {
|
||||||
return self.internal_error(
|
return self.internal_error(
|
||||||
|
Loading…
Reference in New Issue
Block a user