envvault/cli/commands/
delete.rs1use dialoguer::Confirm;
4
5use crate::cli::output;
6use crate::cli::{load_keyfile, prompt_password_for_vault, vault_path, Cli};
7use crate::errors::{EnvVaultError, Result};
8use crate::vault::VaultStore;
9
10pub fn execute(cli: &Cli, key: &str, force: bool) -> Result<()> {
12 let path = vault_path(cli)?;
13
14 if !force {
16 let confirmed = Confirm::new()
17 .with_prompt(format!("Delete secret '{key}'?"))
18 .default(false)
19 .interact()
20 .map_err(|e| EnvVaultError::CommandFailed(format!("confirm prompt: {e}")))?;
21
22 if !confirmed {
23 output::info("Cancelled.");
24 return Ok(());
25 }
26 }
27
28 let keyfile = load_keyfile(cli)?;
30 let vault_id = path.to_string_lossy();
31 let password = prompt_password_for_vault(Some(&vault_id))?;
32 let mut store = VaultStore::open(&path, password.as_bytes(), keyfile.as_deref())?;
33
34 store.delete_secret(key)?;
36 store.save()?;
37
38 crate::audit::log_audit(cli, "delete", Some(key), None);
39 output::success(&format!("Deleted secret '{key}'"));
40
41 Ok(())
42}