///|
pub(all) enum GateStatus {
Pass
Warn
Fail
} derive(Eq, Debug)
///|
pub struct QualityGate {
name : String
status : GateStatus
detail : String
} derive(Eq, Debug)
///|
pub fn QualityGate::new(
name : String,
status : GateStatus,
detail : String,
) -> QualityGate {
{ name, status, detail }
}
///|
pub struct GuardQualityReport {
gates : Array[QualityGate]
} derive(Eq, Debug)
///|
pub fn GuardQualityReport::pass_count(self : GuardQualityReport) -> Int {
let mut count = 0
for i in 0.. Int {
let mut count = 0
for i in 0.. Bool {
self.fail_count() == 0
}
///|
fn provider_gate(policy : VerificationPolicy) -> QualityGate {
if policy.provider.name == "" {
QualityGate::new("provider", Fail, "provider profile is empty")
} else {
QualityGate::new("provider", Pass, "provider profile configured")
}
}
///|
fn secret_gate(policy : VerificationPolicy) -> QualityGate {
if policy.secret.length() < 6 {
QualityGate::new(
"secret",
Warn,
"secret is short; use a stronger production secret",
)
} else {
QualityGate::new("secret", Pass, "secret configured")
}
}
///|
fn timestamp_gate(policy : VerificationPolicy) -> QualityGate {
if !policy.require_timestamp {
QualityGate::new("timestamp", Warn, "timestamp validation is disabled")
} else if policy.provider.timestamp_tolerance_seconds <= 0 {
QualityGate::new("timestamp", Fail, "timestamp window must be positive")
} else {
QualityGate::new("timestamp", Pass, "timestamp validation enabled")
}
}
///|
fn event_id_gate(policy : VerificationPolicy) -> QualityGate {
if policy.require_event_id {
QualityGate::new("event_id", Pass, "event id is required")
} else {
QualityGate::new("event_id", Warn, "event id requirement disabled")
}
}
///|
fn router_gate(router : EventRouter) -> QualityGate {
if router.enabled_count() == 0 {
QualityGate::new("router", Warn, "router has no enabled rules")
} else {
QualityGate::new("router", Pass, "router has enabled rules")
}
}
///|
pub fn evaluate_guard_config(
policy : VerificationPolicy,
router : EventRouter,
) -> GuardQualityReport {
{
gates: [
provider_gate(policy),
secret_gate(policy),
timestamp_gate(policy),
event_id_gate(policy),
router_gate(router),
],
}
}
///|
pub fn quality_text(report : GuardQualityReport) -> String {
let builder = StringBuilder::new()
for i in 0.. builder.write_string("pass")
Warn => builder.write_string("warn")
Fail => builder.write_string("fail")
}
builder.write_string(" ")
builder.write_string(report.gates[i].detail)
builder.write_string("\n")
}
builder.to_string()
}