🐛 Fixes bw using wrong command to get items
This commit is contained in:
@@ -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() -> Result<Vec<Item>, Error> {
|
||||||
}
|
let items_raw = sh::sh(format!("{} list items --raw", EXECUTABLE));
|
||||||
|
|
||||||
pub fn get_items(session: String) -> Result<Vec<Item>, Error> {
|
|
||||||
let items_raw = sh::sh(format!("BW_SESSION={} {} list --raw", session, 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
@@ -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()),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user