🐛 Fixes bw using wrong command to get items

This commit is contained in:
2026-07-19 16:34:42 +02:00
parent 8d4b007c51
commit bfc24d312d
2 changed files with 22 additions and 22 deletions
+6 -14
View File
@@ -1,6 +1,6 @@
use crate::sh; use crate::sh;
use serde::Deserialize; use serde::Deserialize;
use std::io::{Error, ErrorKind}; use std::io::{Error, ErrorKind, Write, stdin, stdout};
const EXECUTABLE: &str = "bw"; const EXECUTABLE: &str = "bw";
@@ -42,7 +42,7 @@ pub struct ItemField {
pub struct Login { pub struct Login {
pub uris: Vec<LoginUri>, pub uris: Vec<LoginUri>,
pub username: String, pub username: String,
pub password: String, pub password: Option<String>,
pub totp: Option<String>, pub totp: Option<String>,
#[serde(rename = "passwordRevisionDate")] #[serde(rename = "passwordRevisionDate")]
pub password_revision_date: Option<String>, pub password_revision_date: Option<String>,
@@ -83,7 +83,7 @@ pub struct Fido2Credential {
pub creation_date: String, pub creation_date: String,
} }
pub fn check_bw() -> Result<String, Error> { pub fn check_bw() -> Result<(), Error> {
let which = sh::sh(format!("which {}", EXECUTABLE)); let which = sh::sh(format!("which {}", EXECUTABLE));
if which.is_empty() { if which.is_empty() {
return Err(Error::new( return Err(Error::new(
@@ -92,19 +92,11 @@ pub fn check_bw() -> Result<String, Error> {
)); ));
} }
let session = sh::sh(format!("{} unlock", EXECUTABLE)); Ok(())
if session.is_empty() {
return Err(Error::new(
ErrorKind::Other,
format!("{} couldn't unlock", EXECUTABLE),
));
}
Ok(session)
} }
pub fn get_items(session: String) -> Result<Vec<Item>, Error> { pub fn get_items() -> Result<Vec<Item>, Error> {
let items_raw = sh::sh(format!("BW_SESSION={} {} list --raw", session, EXECUTABLE)); let items_raw = sh::sh(format!("{} list items --raw", EXECUTABLE));
match serde_json::from_str(items_raw.as_str()) { match serde_json::from_str(items_raw.as_str()) {
Ok(val) => Ok(val), Ok(val) => Ok(val),
Err(e) => Err(Error::new( Err(e) => Err(Error::new(
+16 -8
View File
@@ -27,7 +27,7 @@ fn ask_consent(question: String, line1: String, line2: String) -> Result<bool, E
fn sync() -> Result<(), Error> { fn sync() -> Result<(), Error> {
pass::check_pass()?; pass::check_pass()?;
let bw_session = bw::check_bw()?; bw::check_bw()?;
let vaults = pass::get_vaults()?.vaults; let vaults = pass::get_vaults()?.vaults;
if vaults.len() <= 0 { if vaults.len() <= 0 {
@@ -62,7 +62,7 @@ fn sync() -> Result<(), Error> {
let pass_items = pass::get_items(&vault)?; let pass_items = pass::get_items(&vault)?;
let mut pass_logins = pass::get_logins(pass_items); let mut pass_logins = pass::get_logins(pass_items);
let mut bw_items = bw::get_items(bw_session)?; let mut bw_items = bw::get_items()?;
println!(); println!();
println!( println!(
@@ -87,6 +87,12 @@ fn sync() -> Result<(), Error> {
let pass_login = pass_login.unwrap(); let pass_login = pass_login.unwrap();
let bw_password = bw_item.login.password.clone(); let bw_password = bw_item.login.password.clone();
// TODO: fix this
if let None = bw_password {
continue;
}
let bw_password = bw_password.unwrap();
let pass_password = pass_login.password.clone(); let pass_password = pass_login.password.clone();
let bw_user = bw_item.login.username.clone(); let bw_user = bw_item.login.username.clone();
@@ -114,10 +120,7 @@ fn sync() -> Result<(), Error> {
} }
} }
let bw_index = bw_items let bw_index = bw_items.iter().position(|x| x.id == bw_item.id).unwrap();
.iter()
.position(|x| x.id == bw_item.id)
.unwrap();
bw_items.remove(bw_index); bw_items.remove(bw_index);
let pass_index = pass_logins let pass_index = pass_logins
@@ -138,10 +141,15 @@ fn sync() -> Result<(), Error> {
let consent = ask_consent( let consent = ask_consent(
format!("Attempting to create {}:", bw_item.name), format!("Attempting to create {}:", bw_item.name),
format!("{}", bw_item.login.username), format!("{}", bw_item.login.username),
format!("{}", bw_item.login.password), format!("{:?}", bw_item.login.password),
)?; )?;
if consent { if consent {
pass::create(&vault, bw_item.name, bw_item.login.username, bw_item.login.password); pass::create(
&vault,
bw_item.name,
bw_item.login.username,
bw_item.login.password.unwrap_or("".to_string()),
);
} }
} }