🐛 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 serde::Deserialize;
use std::io::{Error, ErrorKind};
use std::io::{Error, ErrorKind, Write, stdin, stdout};
const EXECUTABLE: &str = "bw";
@@ -42,7 +42,7 @@ pub struct ItemField {
pub struct Login {
pub uris: Vec<LoginUri>,
pub username: String,
pub password: String,
pub password: Option<String>,
pub totp: Option<String>,
#[serde(rename = "passwordRevisionDate")]
pub password_revision_date: Option<String>,
@@ -83,7 +83,7 @@ pub struct Fido2Credential {
pub creation_date: String,
}
pub fn check_bw() -> Result<String, Error> {
pub fn check_bw() -> Result<(), Error> {
let which = sh::sh(format!("which {}", EXECUTABLE));
if which.is_empty() {
return Err(Error::new(
@@ -92,19 +92,11 @@ pub fn check_bw() -> Result<String, Error> {
));
}
let session = sh::sh(format!("{} unlock", EXECUTABLE));
if session.is_empty() {
return Err(Error::new(
ErrorKind::Other,
format!("{} couldn't unlock", EXECUTABLE),
));
}
Ok(session)
Ok(())
}
pub fn get_items(session: String) -> Result<Vec<Item>, Error> {
let items_raw = sh::sh(format!("BW_SESSION={} {} list --raw", session, EXECUTABLE));
pub fn get_items() -> Result<Vec<Item>, Error> {
let items_raw = sh::sh(format!("{} list items --raw", EXECUTABLE));
match serde_json::from_str(items_raw.as_str()) {
Ok(val) => Ok(val),
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> {
pass::check_pass()?;
let bw_session = bw::check_bw()?;
bw::check_bw()?;
let vaults = pass::get_vaults()?.vaults;
if vaults.len() <= 0 {
@@ -62,7 +62,7 @@ fn sync() -> Result<(), Error> {
let pass_items = pass::get_items(&vault)?;
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!(
@@ -87,6 +87,12 @@ fn sync() -> Result<(), Error> {
let pass_login = pass_login.unwrap();
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 bw_user = bw_item.login.username.clone();
@@ -114,10 +120,7 @@ fn sync() -> Result<(), Error> {
}
}
let bw_index = bw_items
.iter()
.position(|x| x.id == bw_item.id)
.unwrap();
let bw_index = bw_items.iter().position(|x| x.id == bw_item.id).unwrap();
bw_items.remove(bw_index);
let pass_index = pass_logins
@@ -138,10 +141,15 @@ fn sync() -> Result<(), Error> {
let consent = ask_consent(
format!("Attempting to create {}:", bw_item.name),
format!("{}", bw_item.login.username),
format!("{}", bw_item.login.password),
format!("{:?}", bw_item.login.password),
)?;
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()),
);
}
}