Wallet encryption commands
This commit is contained in:
@@ -201,6 +201,124 @@ impl Command for ExportCommand {
|
||||
}
|
||||
}
|
||||
|
||||
struct EncryptCommand {}
|
||||
impl Command for EncryptCommand {
|
||||
fn help(&self) -> String {
|
||||
let mut h = vec![];
|
||||
h.push("Encrypt the wallet with a password");
|
||||
h.push("Note 1: This will encrypt the seed and the sapling and transparent private keys.");
|
||||
h.push(" Use 'unlock' to temporarily unlock the wallet for spending or 'decrypt' ");
|
||||
h.push(" to permanatly remove the encryption");
|
||||
h.push("Note 2: If you forget the password, the only way to recover the wallet is to restore");
|
||||
h.push(" from the seed phrase.");
|
||||
h.push("Usage:");
|
||||
h.push("encrypt password");
|
||||
h.push("");
|
||||
h.push("Example:");
|
||||
h.push("encrypt my_strong_password");
|
||||
|
||||
h.join("\n")
|
||||
}
|
||||
|
||||
fn short_help(&self) -> String {
|
||||
"Encrypt the wallet with a password".to_string()
|
||||
}
|
||||
|
||||
fn exec(&self, args: &[&str], lightclient: &LightClient) -> String {
|
||||
if args.len() != 1 {
|
||||
return self.help();
|
||||
}
|
||||
|
||||
let passwd = args[0].to_string();
|
||||
|
||||
match lightclient.wallet.write().unwrap().encrypt(passwd) {
|
||||
Ok(_) => object!{ "result" => "success" },
|
||||
Err(e) => object!{
|
||||
"result" => "error",
|
||||
"error" => e.to_string()
|
||||
}
|
||||
}.pretty(2)
|
||||
}
|
||||
}
|
||||
|
||||
struct DecryptCommand {}
|
||||
impl Command for DecryptCommand {
|
||||
fn help(&self) -> String {
|
||||
let mut h = vec![];
|
||||
h.push("Completely remove wallet encryption, storing the wallet in plaintext on disk");
|
||||
h.push("Note 1: This will decrypt the seed and the sapling and transparent private keys and store them on disk.");
|
||||
h.push(" Use 'unlock' to temporarily unlock the wallet for spending");
|
||||
h.push("Note 2: If you've forgotten the password, the only way to recover the wallet is to restore");
|
||||
h.push(" from the seed phrase.");
|
||||
h.push("Usage:");
|
||||
h.push("decrypt password");
|
||||
h.push("");
|
||||
h.push("Example:");
|
||||
h.push("decrypt my_strong_password");
|
||||
|
||||
h.join("\n")
|
||||
}
|
||||
|
||||
fn short_help(&self) -> String {
|
||||
"Completely remove wallet encryption".to_string()
|
||||
}
|
||||
|
||||
fn exec(&self, args: &[&str], lightclient: &LightClient) -> String {
|
||||
if args.len() != 1 {
|
||||
return self.help();
|
||||
}
|
||||
|
||||
let passwd = args[0].to_string();
|
||||
|
||||
match lightclient.wallet.write().unwrap().remove_encryption(passwd) {
|
||||
Ok(_) => object!{ "result" => "success" },
|
||||
Err(e) => object!{
|
||||
"result" => "error",
|
||||
"error" => e.to_string()
|
||||
}
|
||||
}.pretty(2)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct UnlockCommand {}
|
||||
impl Command for UnlockCommand {
|
||||
fn help(&self) -> String {
|
||||
let mut h = vec![];
|
||||
h.push("Unlock the wallet's encryption in memory, allowing spending from this wallet.");
|
||||
h.push("Note 1: This will decrypt spending keys in memory only. The wallet remains encrypted on disk");
|
||||
h.push(" Use 'decrypt' to remove the encryption permanatly.");
|
||||
h.push("Note 2: If you've forgotten the password, the only way to recover the wallet is to restore");
|
||||
h.push(" from the seed phrase.");
|
||||
h.push("Usage:");
|
||||
h.push("unlock password");
|
||||
h.push("");
|
||||
h.push("Example:");
|
||||
h.push("unlock my_strong_password");
|
||||
|
||||
h.join("\n")
|
||||
}
|
||||
|
||||
fn short_help(&self) -> String {
|
||||
"Unlock wallet encryption for spending".to_string()
|
||||
}
|
||||
|
||||
fn exec(&self, args: &[&str], lightclient: &LightClient) -> String {
|
||||
if args.len() != 1 {
|
||||
return self.help();
|
||||
}
|
||||
|
||||
let passwd = args[0].to_string();
|
||||
|
||||
match lightclient.wallet.write().unwrap().unlock(passwd) {
|
||||
Ok(_) => object!{ "result" => "success" },
|
||||
Err(e) => object!{
|
||||
"result" => "error",
|
||||
"error" => e.to_string()
|
||||
}
|
||||
}.pretty(2)
|
||||
}
|
||||
}
|
||||
|
||||
struct SendCommand {}
|
||||
impl Command for SendCommand {
|
||||
@@ -527,6 +645,9 @@ pub fn get_commands() -> Box<HashMap<String, Box<dyn Command>>> {
|
||||
map.insert("notes".to_string(), Box::new(NotesCommand{}));
|
||||
map.insert("new".to_string(), Box::new(NewAddressCommand{}));
|
||||
map.insert("seed".to_string(), Box::new(SeedCommand{}));
|
||||
map.insert("encrypt".to_string(), Box::new(EncryptCommand{}));
|
||||
map.insert("decrypt".to_string(), Box::new(DecryptCommand{}));
|
||||
map.insert("unlock".to_string(), Box::new(UnlockCommand{}));
|
||||
map.insert("fixbip39bug".to_string(), Box::new(FixBip39BugCommand{}));
|
||||
|
||||
Box::new(map)
|
||||
|
||||
Reference in New Issue
Block a user