0.34.13_cleaup_code

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-26 14:14:41 +01:00
1 parent ec46a96a29
commit 5c2e50ec06
87 files changed
+4890 -1338

No files matched your search

+23 -8
View File
@@ -3,7 +3,8 @@ fn normalize_public_admin_origin(public_origin: &str) -> Result<String> {
public_origin.len() <= 255 && !public_origin.chars().any(|c| matches!(c, '@' | '#' | '?' | ',' | '\\')),
"administration public_origin must be a single HTTPS origin without userinfo, query or fragment"
);
let uri = public_origin.parse::<http::Uri>()
let uri = public_origin
.parse::<http::Uri>()
.context("invalid administration public_origin")?;
ensure!(
uri.scheme_str() == Some("https")
@@ -11,7 +12,8 @@ fn normalize_public_admin_origin(public_origin: &str) -> Result<String> {
&& matches!(uri.path(), "" | "/"),
"administration public_origin must be HTTPS without a path or query"
);
let authority = uri.authority()
let authority = uri
.authority()
.context("administration public_origin requires an authority")?;
let host = crate::config::normalize_host(authority.host())?;
ensure!(
@@ -19,9 +21,13 @@ fn normalize_public_admin_origin(public_origin: &str) -> Result<String> {
"administration public_origin must name a DNS hostname"
);
let port = if authority.as_str().contains(':') {
let port = authority.port_u16()
let port = authority
.port_u16()
.context("invalid administration public_origin port")?;
ensure!(port > 0, "administration public_origin port must be nonzero");
ensure!(
port > 0,
"administration public_origin port must be nonzero"
);
format!(":{port}")
} else {
String::new()
@@ -31,17 +37,26 @@ fn normalize_public_admin_origin(public_origin: &str) -> Result<String> {
impl Administration {
pub fn public_origin_host(&self) -> Option<&str> {
self.public_origin.as_deref()
self.public_origin
.as_deref()
.and_then(|url| url.strip_prefix("https://"))
.and_then(|authority| authority.split(':').next())
}
pub fn explicitly_allowed_panel_host(&self, host: &str) -> bool {
self.allowed_hosts.iter().any(|allowed| allowed.eq_ignore_ascii_case(host))
|| self.public_origin_host().is_some_and(|name| name.eq_ignore_ascii_case(host))
self.allowed_hosts
.iter()
.any(|allowed| allowed.eq_ignore_ascii_case(host))
|| self
.public_origin_host()
.is_some_and(|name| name.eq_ignore_ascii_case(host))
}
pub fn include_public_origin_host(&mut self) {
if let Some(host) = self.public_origin_host().map(str::to_owned) {
if !self.allowed_hosts.iter().any(|allowed| allowed.eq_ignore_ascii_case(&host)) {
if !self
.allowed_hosts
.iter()
.any(|allowed| allowed.eq_ignore_ascii_case(&host))
{
self.allowed_hosts.push(host);
}
}
+59 -12
View File
@@ -15,11 +15,29 @@ mod tests {
};
configured.validate().unwrap();
assert_eq!(configured.idle_timeout(), Duration::from_secs(45));
assert_eq!(configured.max_connection_lifetime(), Some(Duration::from_secs(3_600)));
assert_eq!(
configured.max_connection_lifetime(),
Some(Duration::from_secs(3_600))
);
assert_eq!(configured.drain_timeout(), Duration::from_secs(20));
assert!(Http2Connections { idle_timeout_seconds: 0, ..defaults }.validate().is_err());
assert!(Http2Connections { max_connection_lifetime_seconds: 2_592_001, ..defaults }.validate().is_err());
assert!(Http2Connections { drain_timeout_seconds: 0, ..defaults }.validate().is_err());
assert!(Http2Connections {
idle_timeout_seconds: 0,
..defaults
}
.validate()
.is_err());
assert!(Http2Connections {
max_connection_lifetime_seconds: 2_592_001,
..defaults
}
.validate()
.is_err());
assert!(Http2Connections {
drain_timeout_seconds: 0,
..defaults
}
.validate()
.is_err());
}
#[test]
fn new_install_server_header_defaults_to_rustproxy_without_changing_legacy_missing_field() {
@@ -120,13 +138,29 @@ mod tests {
locks.ensure_config(&mut config);
let http = config.listeners.endpoints.iter().find(|item| item.id == "http").unwrap();
let https = config.listeners.endpoints.iter().find(|item| item.id == "https").unwrap();
let http = config
.listeners
.endpoints
.iter()
.find(|item| item.id == "http")
.unwrap();
let https = config
.listeners
.endpoints
.iter()
.find(|item| item.id == "https")
.unwrap();
assert_eq!(http.binding.address, "0.0.0.0:8181".parse().unwrap());
assert!(http.additional_addresses.is_empty());
assert_eq!(https.binding.address, "0.0.0.0:8443".parse().unwrap());
assert!(https.additional_addresses.is_empty());
assert!(!config.listeners.endpoints.iter().filter(|item| item.enabled).flat_map(|item| item.bindings()).any(|binding| binding.address.port() == 80 || binding.address.port() == 443));
assert!(!config
.listeners
.endpoints
.iter()
.filter(|item| item.enabled)
.flat_map(|item| item.bindings())
.any(|binding| binding.address.port() == 80 || binding.address.port() == 443));
}
#[test]
@@ -264,19 +298,32 @@ mod tests {
..Administration::default()
};
admin.validate(&tls).unwrap();
assert_eq!(admin.public_origin.as_deref(), Some("https://panel.example.test:8443"));
assert_eq!(
admin.public_origin.as_deref(),
Some("https://panel.example.test:8443")
);
assert_eq!(admin.public_origin_host(), Some("panel.example.test"));
assert!(admin.allowed_hosts.is_empty(), "pin must not be stored twice");
assert!(
admin.allowed_hosts.is_empty(),
"pin must not be stored twice"
);
assert!(admin.explicitly_allowed_panel_host("PANEL.EXAMPLE.TEST"));
assert!(!admin.explicitly_allowed_panel_host("other.example.test"));
let mut runtime = admin.clone();
runtime.include_public_origin_host();
runtime.include_public_origin_host();
assert_eq!(runtime.allowed_hosts, vec!["panel.example.test".to_owned()]);
assert!(admin.allowed_hosts.is_empty(), "saved config remains unchanged");
let active = Administration { public_origin: None, ..admin.clone() };
assert!(
admin.allowed_hosts.is_empty(),
"saved config remains unchanged"
);
let active = Administration {
public_origin: None,
..admin.clone()
};
assert!(admin.restart_differs(&active));
let mut legacy: Administration = serde_json::from_str(r#"{"allowed_hosts":["panel.example.test"]}"#).unwrap();
let mut legacy: Administration =
serde_json::from_str(r#"{"allowed_hosts":["panel.example.test"]}"#).unwrap();
legacy.validate(&tls).unwrap();
assert_eq!(legacy.public_origin, None);
assert!(legacy.explicitly_allowed_panel_host("panel.example.test"));