v0.31.4
This commit is contained in:
1 parent
95c55da2ee
commit
d942c1a35d
42 files changed
+1265
-109
No files matched your search
@@ -256,6 +256,67 @@ mod tests {
|
||||
admin.allowed_hosts = vec!["panel.example.com".into(), "PANEL.EXAMPLE.COM.".into()];
|
||||
assert!(admin.validate(&crate::tls::Settings::default()).is_err());
|
||||
}
|
||||
#[test]
|
||||
fn administration_public_origin_is_https_explicit_and_restart_bound() {
|
||||
let tls = crate::tls::Settings::default();
|
||||
let mut admin = Administration {
|
||||
public_origin: Some("https://Panel.Example.TEST:8443/".into()),
|
||||
..Administration::default()
|
||||
};
|
||||
admin.validate(&tls).unwrap();
|
||||
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.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.restart_differs(&active));
|
||||
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"));
|
||||
let mut old_pin: Administration = serde_json::from_str(
|
||||
r#"{"public_origin":"https://panel.example.test","allowed_hosts":["PANEL.Example.TEST.","other.example.test"]}"#
|
||||
).unwrap();
|
||||
old_pin.validate(&tls).unwrap();
|
||||
assert_eq!(old_pin.allowed_hosts, vec!["other.example.test".to_owned()]);
|
||||
assert!(old_pin.explicitly_allowed_panel_host("panel.example.test"));
|
||||
assert!(old_pin.explicitly_allowed_panel_host("other.example.test"));
|
||||
// Additional hosts are independent: editing/removing the pinned origin
|
||||
// must not leave its former hostname in the saved strict list.
|
||||
let mut changed = admin.clone();
|
||||
changed.public_origin = Some("https://other.example.test".into());
|
||||
changed.validate(&tls).unwrap();
|
||||
assert_eq!(changed.public_origin_host(), Some("other.example.test"));
|
||||
assert!(!changed.explicitly_allowed_panel_host("panel.example.test"));
|
||||
let mut opted_out = changed;
|
||||
opted_out.public_origin = None;
|
||||
opted_out.validate(&tls).unwrap();
|
||||
assert!(opted_out.allowed_hosts.is_empty());
|
||||
for invalid in [
|
||||
"http://panel.example.test",
|
||||
"https://*.example.test",
|
||||
"https://localhost",
|
||||
"https://127.0.0.1",
|
||||
"https://panel.example.test/a",
|
||||
"https://panel.example.test/?x=1",
|
||||
"https://admin@panel.example.test",
|
||||
"https://panel.example.test#frag",
|
||||
"https://panel.example.test:0",
|
||||
"https://panel.example.test:99999",
|
||||
"https://panel.example.test,https://evil.example.test",
|
||||
] {
|
||||
let mut candidate = admin.clone();
|
||||
candidate.public_origin = Some(invalid.into());
|
||||
assert!(candidate.validate(&tls).is_err(), "must reject {invalid}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn administration_hostname_count_is_not_artificially_capped() {
|
||||
let mut admin = Administration {
|
||||
|
||||
Reference in new issue
Block a user