use serde_json::Value;
use crate::core::{dns::service::SettingsRead, error::Result, redaction::redact_sensitive_fields};
pub async fn get_settings<C: SettingsRead + ?Sized>(client: &C) -> Result<Value> {
client.get_settings().await.map(redact_sensitive_fields)
}
pub async fn get_settings_unredacted<C: SettingsRead + ?Sized>(client: &C) -> Result<Value> {
client.get_settings().await
}
#[cfg(test)]
mod tests {
use serde_json::{Value, json};
use super::*;
use crate::core::{error::Result, redaction::REDACTED_MARKER};
struct FakeSettingsRead {
settings: Value,
}
impl SettingsRead for FakeSettingsRead {
async fn get_settings(&self) -> Result<Value> {
Ok(self.settings.clone())
}
}
#[tokio::test]
async fn get_settings_redacts_before_returning() {
let client = FakeSettingsRead {
settings: json!({
"version": "13.4.1",
"tsigKeys": [{ "sharedSecret": "actual-secret" }]
}),
};
let settings = get_settings(&client).await.unwrap();
assert_eq!(settings["version"], "13.4.1");
assert_eq!(settings["tsigKeys"][0]["sharedSecret"], REDACTED_MARKER);
}
#[tokio::test]
async fn get_settings_unredacted_preserves_secret_values() {
let client = FakeSettingsRead {
settings: json!({
"version": "13.4.1",
"tsigKeys": [{ "sharedSecret": "actual-secret" }]
}),
};
let settings = get_settings_unredacted(&client).await.unwrap();
assert_eq!(settings["version"], "13.4.1");
assert_eq!(settings["tsigKeys"][0]["sharedSecret"], "actual-secret");
}
}