#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(dead_code)]
pub enum DecisionTier {
Allow,
Warn,
Deny,
Other,
}
#[allow(dead_code)]
pub fn decision_tier(decision: &str) -> DecisionTier {
match decision {
"ALLOW" => DecisionTier::Allow,
"WARN" => DecisionTier::Warn,
"DENY" => DecisionTier::Deny,
"ALLOWED_NO_FINDINGS" => DecisionTier::Allow,
"VECTOR_VERDICT" | "DM_THRESHOLD_BLOCK" => DecisionTier::Deny,
"RISK_ACCEPTANCE_REQUIRED" => DecisionTier::Warn,
_ => DecisionTier::Other,
}
}
#[allow(dead_code)]
pub fn decision_tier_str(verdict_label: &str, composite_score: u8) -> &'static str {
decision_tier_str_with_severity(verdict_label, None, composite_score)
}
#[allow(dead_code)]
pub fn decision_tier_str_with_severity(
verdict_label: &str,
severity: Option<&str>,
composite_score: u8,
) -> &'static str {
if verdict_label == "VECTOR_VERDICT" {
return match severity.unwrap_or("").to_uppercase().as_str() {
"HIGH" | "CRITICAL" => "DENY",
_ => "WARN",
};
}
match decision_tier(verdict_label) {
DecisionTier::Allow => "ALLOW",
DecisionTier::Warn => "WARN",
DecisionTier::Deny => "DENY",
DecisionTier::Other => {
if composite_score >= 70 {
"DENY"
} else {
"WARN"
}
}
}
}