quantus_cli/wallet/
password.rs1use crate::{error::Result, log_print, log_verbose, wallet::WalletManager};
2use colored::Colorize;
3
4pub fn get_wallet_password(
6 wallet_name: &str,
7 password: Option<String>,
8 password_file: Option<String>,
9) -> Result<String> {
10 if let Some(pwd) = password {
12 log_verbose!("🔑 Using password from --password flag");
13 return Ok(pwd);
14 }
15
16 if let Some(file_path) = password_file {
18 log_verbose!("🔑 Reading password from file: {}", file_path);
19 let pwd = std::fs::read_to_string(&file_path)
20 .map_err(|e| {
21 crate::error::QuantusError::Generic(format!(
22 "Failed to read password file '{file_path}': {e}"
23 ))
24 })?
25 .trim()
26 .to_string();
27 return Ok(pwd);
28 }
29
30 if let Ok(env_password) = std::env::var("QUANTUS_WALLET_PASSWORD") {
32 log_verbose!("🔑 Using password from QUANTUS_WALLET_PASSWORD environment variable");
33 return Ok(env_password);
34 }
35
36 let wallet_env_var = format!("QUANTUS_WALLET_PASSWORD_{}", wallet_name.to_uppercase());
38 if let Ok(env_password) = std::env::var(&wallet_env_var) {
39 log_verbose!("🔑 Using password from {} environment variable", wallet_env_var);
40 return Ok(env_password);
41 }
42
43 log_verbose!("🔑 Trying empty password first...");
45 let wallet_manager = WalletManager::new()?;
46 if wallet_manager.load_wallet(wallet_name, "").is_ok() {
47 log_verbose!("✅ Empty password works for wallet '{}'", wallet_name);
48 return Ok("".to_string());
49 }
50
51 get_password_from_user(&format!("Enter password for wallet '{wallet_name}'"))
53}
54
55pub fn get_mnemonic_from_user() -> Result<String> {
57 log_print!("{}", "Please enter or paste your secret phrase:".bright_yellow());
58 let mnemonic = rpassword::read_password().map_err(|e| {
59 crate::error::QuantusError::Generic(format!("Failed to read secret phrase: {e}"))
60 })?;
61 Ok(mnemonic.trim().to_string())
62}
63
64pub fn get_password_from_user(prompt: &str) -> Result<String> {
66 log_print!("{}", prompt.bright_yellow());
67 let password = rpassword::read_password().map_err(|e| {
68 crate::error::QuantusError::Generic(format!("Failed to read password: {e}"))
69 })?;
70 Ok(password)
71}