dnslib/core/dns/
settings.rs1use serde_json::Value;
2
3use crate::core::{dns::service::SettingsRead, error::Result, redaction::redact_sensitive_fields};
4
5pub async fn get_settings<C: SettingsRead + ?Sized>(client: &C) -> Result<Value> {
11 client.get_settings().await.map(redact_sensitive_fields)
12}
13
14pub async fn get_settings_unredacted<C: SettingsRead + ?Sized>(client: &C) -> Result<Value> {
22 client.get_settings().await
23}
24
25#[cfg(test)]
26mod tests {
27 use serde_json::{Value, json};
28
29 use super::*;
30 use crate::core::{error::Result, redaction::REDACTED_MARKER};
31
32 struct FakeSettingsRead {
33 settings: Value,
34 }
35
36 impl SettingsRead for FakeSettingsRead {
37 async fn get_settings(&self) -> Result<Value> {
38 Ok(self.settings.clone())
39 }
40 }
41
42 #[tokio::test]
43 async fn get_settings_redacts_before_returning() {
44 let client = FakeSettingsRead {
45 settings: json!({
46 "version": "13.4.1",
47 "tsigKeys": [{ "sharedSecret": "actual-secret" }]
48 }),
49 };
50
51 let settings = get_settings(&client).await.unwrap();
52
53 assert_eq!(settings["version"], "13.4.1");
54 assert_eq!(settings["tsigKeys"][0]["sharedSecret"], REDACTED_MARKER);
55 }
56
57 #[tokio::test]
58 async fn get_settings_unredacted_preserves_secret_values() {
59 let client = FakeSettingsRead {
60 settings: json!({
61 "version": "13.4.1",
62 "tsigKeys": [{ "sharedSecret": "actual-secret" }]
63 }),
64 };
65
66 let settings = get_settings_unredacted(&client).await.unwrap();
67
68 assert_eq!(settings["version"], "13.4.1");
69 assert_eq!(settings["tsigKeys"][0]["sharedSecret"], "actual-secret");
70 }
71}