Adds update confirmation check

Signed-off-by: Ash Svitan <selfsigned-ash@proton.me>
This commit is contained in:
2026-04-30 20:49:07 +02:00
parent 15dd1722d4
commit cad0caf379
2 changed files with 40 additions and 28 deletions
+29 -20
View File
@@ -3,7 +3,8 @@ mod rbw;
mod sh; mod sh;
use std::env; use std::env;
use std::io::{Error, ErrorKind}; use std::io;
use std::io::{Error, ErrorKind, Write};
const ENV_VAR_DEFAULT_VAULT: &str = "PASS_VAULT"; const ENV_VAR_DEFAULT_VAULT: &str = "PASS_VAULT";
@@ -56,14 +57,12 @@ fn main() -> Result<(), Error> {
'inner: for pass_login_iter in pass_logins.iter() { 'inner: for pass_login_iter in pass_logins.iter() {
if rbw_login.name == pass_login_iter.title { if rbw_login.name == pass_login_iter.title {
println!("found match! {}", rbw_login.name);
pass_login = Some(pass_login_iter); pass_login = Some(pass_login_iter);
break 'inner; break 'inner;
} }
} }
if let None = pass_login { if let None = pass_login {
println!("no match found for {}!", rbw_login.name);
continue; continue;
} }
let pass_login = pass_login.unwrap(); let pass_login = pass_login.unwrap();
@@ -78,29 +77,39 @@ fn main() -> Result<(), Error> {
}; };
let pass_user_is_actually_email = pass_user == pass_login.email; let pass_user_is_actually_email = pass_user == pass_login.email;
if rbw_password == pass_password { if rbw_user != pass_user || rbw_password != pass_password {
let rbw_index = rbw_logins // TODO: need to update
.iter() println!("Attempting to update:");
.position(|x| x.id == rbw_login.id) println!("\t{} -> {}", pass_user, rbw_user);
.unwrap(); println!("\t{} -> {}", pass_password, rbw_password);
rbw_logins.remove(rbw_index); print!("Proceed? [y/N] ");
io::stdout().flush()?;
let mut input = String::new();
io::stdin().read_line(&mut input)?;
let pass_index = pass_logins if input.to_lowercase() == "y\n" {
.iter() println!("UPDATING!!!");
.position(|x| x.id == pass_login.id) }
.unwrap();
pass_logins.remove(pass_index);
continue;
} else {
println!(
"password doesn't match! '{}' / '{}'",
rbw_password, pass_password
);
} }
let rbw_index = rbw_logins
.iter()
.position(|x| x.id == rbw_login.id)
.unwrap();
rbw_logins.remove(rbw_index);
let pass_index = pass_logins
.iter()
.position(|x| x.id == pass_login.id)
.unwrap();
pass_logins.remove(pass_index);
} }
// TODO: need to create these
println!("remaining {} rbw items", rbw_logins.len()); println!("remaining {} rbw items", rbw_logins.len());
println!("{:?}", rbw_logins); println!("{:?}", rbw_logins);
// TODO: need to delete these
println!("remaining {} pass items", pass_logins.len()); println!("remaining {} pass items", pass_logins.len());
println!("{:?}", pass_logins); println!("{:?}", pass_logins);
+11 -8
View File
@@ -18,11 +18,9 @@ pub struct Item {
pub struct LoginItem { pub struct LoginItem {
pub id: String, pub id: String,
pub name: String, pub name: String,
pub user: Option<String>, pub user: String,
pub password: String, pub password: String,
pub uris: Option<Vec<String>>, pub uris: Vec<String>,
#[serde(rename = "type")]
pub type_: String,
} }
pub fn check_rbw() -> Result<(), Error> { pub fn check_rbw() -> Result<(), Error> {
@@ -59,7 +57,7 @@ pub fn get_items() -> Result<Vec<Item>, Error> {
pub fn get_logins(items: Vec<Item>) -> Result<Vec<LoginItem>, Error> { pub fn get_logins(items: Vec<Item>) -> Result<Vec<LoginItem>, Error> {
let items = items let items = items
.iter() .iter()
.filter(|item| item.type_ == "Login") .filter(|item| item.type_.to_lowercase() == "login")
.collect::<Vec<&Item>>(); .collect::<Vec<&Item>>();
let mut login_items = Vec::<LoginItem>::new(); let mut login_items = Vec::<LoginItem>::new();
@@ -72,13 +70,18 @@ pub fn get_logins(items: Vec<Item>) -> Result<Vec<LoginItem>, Error> {
login_items.push(LoginItem { login_items.push(LoginItem {
id: item.id.clone(), id: item.id.clone(),
name: item.name.clone(), name: item.name.clone(),
user: item.user.clone(), user: match item.user.clone() {
Some(val) => val,
None => "".to_string(),
},
password: match password.strip_suffix("\n") { password: match password.strip_suffix("\n") {
Some(s) => s.to_string(), Some(s) => s.to_string(),
None => password, None => password,
}, },
uris: item.uris.clone(), uris: match item.uris.clone() {
type_: item.type_.clone(), Some(val) => val,
None => Vec::new(),
},
}); });
} }