mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-19 13:58:28 +00:00
Reuse password option prompts again on a wrong password (#4380)
* Prompt for password if incorrect in import * lint and fmt * Use if instead of match * Fix issue raised by @chong-he * Merge branch 'unstable' into reuse-pw-break * Remove unused function
This commit is contained in:
@@ -178,7 +178,13 @@ pub fn cli_run(matches: &ArgMatches, validator_dir: PathBuf) -> Result<(), Strin
|
|||||||
let password_opt = loop {
|
let password_opt = loop {
|
||||||
if let Some(password) = previous_password.clone() {
|
if let Some(password) = previous_password.clone() {
|
||||||
eprintln!("Reuse previous password.");
|
eprintln!("Reuse previous password.");
|
||||||
break Some(password);
|
if check_password_on_keystore(&keystore, &password)? {
|
||||||
|
break Some(password);
|
||||||
|
} else {
|
||||||
|
eprintln!("Reused password incorrect. Retry!");
|
||||||
|
previous_password = None;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
eprintln!();
|
eprintln!();
|
||||||
eprintln!("{}", PASSWORD_PROMPT);
|
eprintln!("{}", PASSWORD_PROMPT);
|
||||||
@@ -201,20 +207,12 @@ pub fn cli_run(matches: &ArgMatches, validator_dir: PathBuf) -> Result<(), Strin
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match keystore.decrypt_keypair(password.as_ref()) {
|
// Check if the password unlocks the keystore
|
||||||
Ok(_) => {
|
if check_password_on_keystore(&keystore, &password)? {
|
||||||
eprintln!("Password is correct.");
|
if reuse_password {
|
||||||
eprintln!();
|
previous_password = Some(password.clone());
|
||||||
sleep(Duration::from_secs(1)); // Provides nicer UX.
|
|
||||||
if reuse_password {
|
|
||||||
previous_password = Some(password.clone());
|
|
||||||
}
|
|
||||||
break Some(password);
|
|
||||||
}
|
}
|
||||||
Err(eth2_keystore::Error::InvalidPassword) => {
|
break Some(password);
|
||||||
eprintln!("Invalid password");
|
|
||||||
}
|
|
||||||
Err(e) => return Err(format!("Error whilst decrypting keypair: {:?}", e)),
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -317,3 +315,27 @@ pub fn cli_run(matches: &ArgMatches, validator_dir: PathBuf) -> Result<(), Strin
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Checks if the given password unlocks the keystore.
|
||||||
|
///
|
||||||
|
/// Returns `Ok(true)` if password unlocks the keystore successfully.
|
||||||
|
/// Returns `Ok(false` if password is incorrect.
|
||||||
|
/// Otherwise, returns the keystore error.
|
||||||
|
fn check_password_on_keystore(
|
||||||
|
keystore: &Keystore,
|
||||||
|
password: &ZeroizeString,
|
||||||
|
) -> Result<bool, String> {
|
||||||
|
match keystore.decrypt_keypair(password.as_ref()) {
|
||||||
|
Ok(_) => {
|
||||||
|
eprintln!("Password is correct.");
|
||||||
|
eprintln!();
|
||||||
|
sleep(Duration::from_secs(1)); // Provides nicer UX.
|
||||||
|
Ok(true)
|
||||||
|
}
|
||||||
|
Err(eth2_keystore::Error::InvalidPassword) => {
|
||||||
|
eprintln!("Invalid password");
|
||||||
|
Ok(false)
|
||||||
|
}
|
||||||
|
Err(e) => Err(format!("Error whilst decrypting keypair: {:?}", e)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user