aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/rbw/commands.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2020-04-12 02:09:15 -0400
committerJesse Luehrs <doy@tozt.net>2020-04-12 02:09:15 -0400
commitbcae263e4e888274f399a75ec5b171ee25edf894 (patch)
treec5af1a9c50a17c21285a3073af8aa1ab9c109493 /src/bin/rbw/commands.rs
parente45e35125e623a8fb683a28f55ad96d42d01a1d0 (diff)
downloadrbw-bcae263e4e888274f399a75ec5b171ee25edf894.tar.gz
rbw-bcae263e4e888274f399a75ec5b171ee25edf894.zip
handle entries with no username or password
Diffstat (limited to 'src/bin/rbw/commands.rs')
-rw-r--r--src/bin/rbw/commands.rs41
1 files changed, 30 insertions, 11 deletions
diff --git a/src/bin/rbw/commands.rs b/src/bin/rbw/commands.rs
index 83c6c81..5f1c2f1 100644
--- a/src/bin/rbw/commands.rs
+++ b/src/bin/rbw/commands.rs
@@ -75,29 +75,48 @@ pub fn get(name: &str, user: Option<&str>) -> anyhow::Result<()> {
let email = config_email()?;
let db = rbw::db::Db::load(&email)
.context("failed to load password database")?;
+ let desc = format!(
+ "{}{}",
+ user.map(|s| format!("{}@", s))
+ .unwrap_or_else(|| "".to_string()),
+ name
+ );
for cipher in db.ciphers {
let cipher_name = crate::actions::decrypt(&cipher.name)
.context("failed to decrypt entry name")?;
if name == cipher_name {
- let cipher_user = crate::actions::decrypt(&cipher.login.username)
- .context("failed to decrypt entry username")?;
if let Some(user) = user {
- if user == cipher_user {
- let pass =
- crate::actions::decrypt(&cipher.login.password)
- .context("failed to decrypt entry password")?;
- println!("{}", pass);
- return Ok(());
+ if let Some(encrypted_user) = &cipher.login.username {
+ let cipher_user = crate::actions::decrypt(encrypted_user)
+ .context("failed to decrypt entry username")?;
+ if user == cipher_user {
+ if let Some(encrypted_pass) = &cipher.login.password {
+ let pass =
+ crate::actions::decrypt(encrypted_pass)
+ .context(
+ "failed to decrypt entry password",
+ )?;
+ println!("{}", pass);
+ } else {
+ eprintln!("no password found for entry {}", desc);
+ }
+ return Ok(());
+ }
}
} else {
- let pass = crate::actions::decrypt(&cipher.login.password)
- .context("failed to decrypt entry password")?;
- println!("{}", pass);
+ if let Some(encrypted_pass) = &cipher.login.password {
+ let pass = crate::actions::decrypt(encrypted_pass)
+ .context("failed to decrypt entry password")?;
+ println!("{}", pass);
+ } else {
+ eprintln!("no password found for entry {}", desc);
+ }
return Ok(());
}
}
}
+ eprintln!("no entry found for {}", desc);
Ok(())
}