fn main() {
let args: Vec<String> = std::env::args().skip(1).collect();
let (Some(gw), Some(md_addr)) = (args.first(), args.get(1)) else {
eprintln!("用法: set_md <网关名> <md_addr>");
std::process::exit(2);
};
let ns = format!("ctp.{gw}");
let store = ek_cfg::Store::eco().expect("档案根");
let map0 = match store.load(&ns) {
Ok(ek_cfg::LoadOutcome::Loaded { map, .. }) => map,
Ok(ek_cfg::LoadOutcome::Fresh) => {
eprintln!("段 {ns} 不存在(先在面板/CLI 登记)");
std::process::exit(1);
}
Err(e) => {
eprintln!("段读不动: {e:?}");
std::process::exit(1);
}
};
let td_user = map0.get_plain("td_user").unwrap_or_default().to_string();
let td_ns_pw = ek_cfg::secret::get(&ns, "gw_td_password")
.map(|v| String::from_utf8_lossy(v.as_bytes()).to_string())
.unwrap_or_default();
if td_ns_pw.is_empty() {
eprintln!("本段密库无 gw_td_password,md 凭据无从复制(先在面板存过密码)");
std::process::exit(1);
}
ek_cfg::secret::register(
&ns,
"gw_md_password",
ek_cfg::SecretValue::from_bytes(td_ns_pw),
)
.expect("密库登记");
let map = map0
.set("md_addr", ek_core::Field::plain(md_addr.trim()))
.set("md_user", ek_core::Field::plain(td_user.trim()))
.set("md_password", ek_core::Field::secret("gw_md_password"));
store.save(&ns, &map).expect("段存档");
println!("已补档 {ns}: md_addr={md_addr}(md 凭据 = 密库引用)");
}