fn main() {
let args: Vec<String> = std::env::args().skip(1).collect();
let (set_mode, rest) = match args.first().map(|s| s.as_str()) {
Some("--set") => (true, &args[1..]),
_ => (false, &args[..]),
};
let (Some(ns), Some(key)) = (rest.first(), rest.get(1)) else {
eprintln!("用法: secret_get [--set] <ns> <key>(--set 从 stdin 读一行)");
std::process::exit(2);
};
if set_mode {
use std::io::Read;
let mut raw = String::new();
std::io::stdin().read_to_string(&mut raw).expect("stdin 读");
let v = raw.trim_end_matches(['\r', '\n']).to_string();
if v.is_empty() {
eprintln!("stdin 空,拒绝灌入");
std::process::exit(2);
}
ek_cfg::secret::register(ns, key, ek_cfg::SecretValue::from_bytes(v))
.expect("密库灌入");
eprintln!("已灌入 {ns}/{key}");
return;
}
match ek_cfg::secret::get(ns, key) {
Some(v) => {
let s = String::from_utf8_lossy(v.as_bytes()).to_string();
print!("{s}");
}
None => {
eprintln!("密库无 {ns}/{key}");
std::process::exit(1);
}
}
}