From 87c9491404bb596d31aebb09311fd5ef3ab3c3e2 Mon Sep 17 00:00:00 2001 From: Brad Seiler Date: Fri, 6 Nov 2026 11:09:32 -0500 Subject: [PATCH] Reuse the configured NIP-FI mode label in policy status Co-authored-by: Honor Signed-off-by: Brad Seiler --- .../buzz-relay/src/api/operator/community_policy.rs | 8 +------- crates/buzz-relay/src/nip_fi_config.rs | 13 +++++++++---- docs/community-auth-upgrades.md | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/crates/buzz-relay/src/api/operator/community_policy.rs b/crates/buzz-relay/src/api/operator/community_policy.rs index df55a0c1d4..ecf86985fb 100644 --- a/crates/buzz-relay/src/api/operator/community_policy.rs +++ b/crates/buzz-relay/src/api/operator/community_policy.rs @@ -49,14 +49,8 @@ fn unavailable(error: buzz_db::DbError) -> Error { } fn mode_fields(state: &AppState, required: Option) -> Value { - use buzz_auth::NipFiMode; let mode = state.config.nip_fi.mode; - let name = match mode { - NipFiMode::Off => "off", - NipFiMode::Shadow => "shadow", - NipFiMode::Enforce => "enforce", - NipFiMode::DenyProtected => "deny-protected", - }; + let name = crate::nip_fi_config::mode_name(mode); serde_json::json!({ "mode": name, "effective_required": required.map(|r| mode.with_requirement(r).restricts()), diff --git a/crates/buzz-relay/src/nip_fi_config.rs b/crates/buzz-relay/src/nip_fi_config.rs index fa1b54f4d7..a6ed9c3280 100644 --- a/crates/buzz-relay/src/nip_fi_config.rs +++ b/crates/buzz-relay/src/nip_fi_config.rs @@ -620,14 +620,19 @@ fn parse_mode() -> Result { } } -/// A missing-setting startup error naming the configured mode. -fn mode_requires(mode: NipFiMode, missing: &str) -> ConfigError { - let value = match mode { +/// Stable configured mode name for operator diagnostics and status. +pub(crate) fn mode_name(mode: NipFiMode) -> &'static str { + match mode { NipFiMode::Enforce => "enforce", NipFiMode::Shadow => "shadow", NipFiMode::Off => "off", NipFiMode::DenyProtected => "deny_protected", - }; + } +} + +/// A missing-setting startup error naming the configured mode. +fn mode_requires(mode: NipFiMode, missing: &str) -> ConfigError { + let value = mode_name(mode); ConfigError::InvalidValue(format!("BUZZ_NIP_FI_MODE={value} but {missing}")) } diff --git a/docs/community-auth-upgrades.md b/docs/community-auth-upgrades.md index 0d246da120..1692b5ee52 100644 --- a/docs/community-auth-upgrades.md +++ b/docs/community-auth-upgrades.md @@ -100,7 +100,7 @@ General status can read legacy receipts, with null CAS preconditions. ## Request enforcement and discovery `off` ignores stored requirements; `shadow` enforces stored true; `enforce` is a -global requirement floor; `deny-protected` denies protected traffic. Report +global requirement floor; `deny_protected` denies protected traffic. Report `effective_required` alongside stored state so disable under enforce and enable under off cannot be mistaken for effective changes. Evaluating policy lookups fail closed on errors; off does not require an FI policy read.