use anyhow::{bail, Context, Result};
use owo_colors::OwoColorize;
use std::fs;
use std::path::Path;
use kx_fides_core::keys::{generate_ed25519, save_keypair};
use super::KeygenArgs;
pub fn run(args: KeygenArgs) -> Result<()> {
let out_path = args.out;
let out_display = out_path.display();
if let Some(parent) = out_path.parent() {
if !parent.as_os_str().is_empty() && !parent.exists() {
fs::create_dir_all(parent)
.with_context(|| format!("failed to create directories for {}", parent.display()))?;
}
}
if Path::new(&out_path).exists() {
bail!("refusing to overwrite existing file: {}", out_display);
}
let kp = generate_ed25519().context("failed to generate Ed25519 keypair")?;
save_keypair(out_path.to_str().unwrap(), &kp)
.with_context(|| format!("failed to write keypair to {}", out_display))?;
println!(
"{} {}",
"✓ generated keypair →".green().bold(),
out_display
);
println!(
"{} {}",
"public key (base64):".cyan(),
kp.public_key
);
Ok(())
}