use serde::Deserialize;
#[allow(clippy::struct_excessive_bools, reason = "security override flags")]
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(default)]
pub struct InsecureOptions {
pub allow_root: bool,
pub allow_public_admin: bool,
pub allow_unbounded_body: bool,
pub skip_pipeline_validation: bool,
pub allow_tls_without_sni: bool,
pub allow_private_health_checks: bool,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn all_flags_default_to_false() {
let opts = InsecureOptions::default();
assert!(!opts.allow_root, "allow_root should default to false");
assert!(!opts.allow_public_admin, "allow_public_admin should default to false");
assert!(
!opts.allow_unbounded_body,
"allow_unbounded_body should default to false"
);
assert!(
!opts.skip_pipeline_validation,
"skip_pipeline_validation should default to false"
);
assert!(
!opts.allow_tls_without_sni,
"allow_tls_without_sni should default to false"
);
assert!(
!opts.allow_private_health_checks,
"allow_private_health_checks should default to false"
);
}
#[test]
fn deserializes_partial_overrides() {
let yaml = "allow_root: true\nskip_pipeline_validation: true\n";
let opts: InsecureOptions = serde_yaml::from_str(yaml).unwrap();
assert!(opts.allow_root, "allow_root should be true");
assert!(opts.skip_pipeline_validation, "skip_pipeline_validation should be true");
assert!(!opts.allow_public_admin, "allow_public_admin should still be false");
}
#[test]
fn deserializes_empty_to_defaults() {
let opts: InsecureOptions = serde_yaml::from_str("{}").unwrap();
assert!(!opts.allow_root, "empty YAML should produce defaults");
}
}