🐛 Fixes bw using wrong command to get items
This commit is contained in:
@@ -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
@@ -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()),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user