use std::path::PathBuf;
use serde::{Deserialize, Serialize};
pub const SECRETS_WRITE_METHOD: &str = "nexo/admin/secrets/write";
#[derive(Clone, Serialize, Deserialize, PartialEq)]
pub struct SecretsWriteInput {
pub name: String,
pub value: String,
}
impl std::fmt::Debug for SecretsWriteInput {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("SecretsWriteInput")
.field("name", &self.name)
.field("value", &"<redacted>")
.finish()
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
pub struct SecretsWriteResponse {
pub path: PathBuf,
pub overwrote_env: bool,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn secrets_write_input_round_trip() {
let i = SecretsWriteInput {
name: "MINIMAX_API_KEY".into(),
value: "sk-test-value".into(),
};
let v = serde_json::to_value(&i).unwrap();
let back: SecretsWriteInput = serde_json::from_value(v).unwrap();
assert_eq!(i, back);
}
#[test]
fn secrets_write_input_debug_redacts_value() {
let i = SecretsWriteInput {
name: "FOO".into(),
value: "leak-me-please".into(),
};
let s = format!("{i:?}");
assert!(s.contains("FOO"));
assert!(s.contains("<redacted>"));
assert!(!s.contains("leak-me-please"));
}
#[test]
fn secrets_write_method_constant() {
assert_eq!(SECRETS_WRITE_METHOD, "nexo/admin/secrets/write");
}
#[test]
fn secrets_write_response_round_trip() {
let r = SecretsWriteResponse {
path: PathBuf::from("/tmp/secrets/FOO.txt"),
overwrote_env: true,
};
let v = serde_json::to_value(&r).unwrap();
let back: SecretsWriteResponse = serde_json::from_value(v).unwrap();
assert_eq!(r, back);
}
}