use crate::{error::Result, log_print, log_verbose, wallet::WalletManager};
use colored::Colorize;
pub fn get_wallet_password(
wallet_name: &str,
password: Option<String>,
password_file: Option<String>,
) -> Result<String> {
if let Some(pwd) = password {
log_verbose!("🔑 Using password from --password flag");
return Ok(pwd);
}
if let Some(file_path) = password_file {
log_verbose!("🔑 Reading password from file: {}", file_path);
let pwd = std::fs::read_to_string(&file_path)
.map_err(|e| {
crate::error::QuantusError::Generic(format!(
"Failed to read password file '{file_path}': {e}"
))
})?
.trim()
.to_string();
return Ok(pwd);
}
if let Ok(env_password) = std::env::var("QUANTUS_WALLET_PASSWORD") {
log_verbose!("🔑 Using password from QUANTUS_WALLET_PASSWORD environment variable");
return Ok(env_password);
}
let wallet_env_var = format!("QUANTUS_WALLET_PASSWORD_{}", wallet_name.to_uppercase());
if let Ok(env_password) = std::env::var(&wallet_env_var) {
log_verbose!("🔑 Using password from {} environment variable", wallet_env_var);
return Ok(env_password);
}
log_verbose!("🔑 Trying empty password first...");
let wallet_manager = WalletManager::new()?;
if wallet_manager.load_wallet(wallet_name, "").is_ok() {
log_verbose!("✅ Empty password works for wallet '{}'", wallet_name);
return Ok("".to_string());
}
get_password_from_user(&format!("Enter password for wallet '{wallet_name}'"))
}
pub fn get_mnemonic_from_user() -> Result<String> {
log_print!("{}", "Please enter or paste your secret phrase:".bright_yellow());
let mnemonic = rpassword::read_password().map_err(|e| {
crate::error::QuantusError::Generic(format!("Failed to read secret phrase: {e}"))
})?;
Ok(mnemonic.trim().to_string())
}
pub fn get_password_from_user(prompt: &str) -> Result<String> {
log_print!("{}", prompt.bright_yellow());
let password = rpassword::read_password().map_err(|e| {
crate::error::QuantusError::Generic(format!("Failed to read password: {e}"))
})?;
Ok(password)
}