implement history get
This commit is contained in:
parent
a6f24bd0b6
commit
778d4e324f
98
src/main.rs
98
src/main.rs
@ -44,7 +44,10 @@ enum CliCommands {
|
|||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
enum HistoryCommands {
|
enum HistoryCommands {
|
||||||
List {},
|
List {},
|
||||||
Get {},
|
Get {
|
||||||
|
index: usize,
|
||||||
|
field: String,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
@ -68,15 +71,14 @@ fn main() {
|
|||||||
debug!("Running history list");
|
debug!("Running history list");
|
||||||
handle_history_list();
|
handle_history_list();
|
||||||
}
|
}
|
||||||
HistoryCommands::Get {} => {
|
HistoryCommands::Get {index, field} => {
|
||||||
debug!("Running history get");
|
debug!("Running history get");
|
||||||
// handle_history_get();
|
handle_history_get(*index, field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn get_history() -> Vec<String> {
|
fn get_history() -> Vec<String> {
|
||||||
let file_path = "/tmp/bw-menu-history.json"; // TODO: use XDG paths
|
let file_path = "/tmp/bw-menu-history.json"; // TODO: use XDG paths
|
||||||
|
|
||||||
@ -429,3 +431,91 @@ fn handle_history_list() {
|
|||||||
}
|
}
|
||||||
dbg!(&logins);
|
dbg!(&logins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn handle_history_get(index: usize, field: &String) {
|
||||||
|
let history = get_history();
|
||||||
|
if index >= history.len() {
|
||||||
|
eprintln!("Trying to get history element {}, but the history only contains {} elements", index, history.len());
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let id = &history[index];
|
||||||
|
|
||||||
|
let item = match crate::bitwarden_api::object_item(&id) {
|
||||||
|
Ok(response) => response.data,
|
||||||
|
Err(msg) => {
|
||||||
|
error!("Failed to get Bitwarden item with id {}. It might not exist anymore.\n{}", id, msg);
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// dbg!(&item.login);
|
||||||
|
// dbg!(&field);
|
||||||
|
|
||||||
|
match item.login {
|
||||||
|
Some(ref login) => {
|
||||||
|
match field.as_ref() {
|
||||||
|
"uris" => {
|
||||||
|
if let Some(uris) = &login.uris {
|
||||||
|
println!("{:?}", uris);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"username" => {
|
||||||
|
if let Some(username) = &login.username {
|
||||||
|
println!("{}", username);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"password" => {
|
||||||
|
if let Some(password) = &login.password {
|
||||||
|
println!("{}", password);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"totp" => {
|
||||||
|
if let Some(totp) = &login.totp {
|
||||||
|
println!("{}", totp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"title" => {
|
||||||
|
let collections: HashMap<String, String> = match crate::bitwarden_api::list_object_collections() {
|
||||||
|
Ok(response) => {
|
||||||
|
info!("Got list of Bitwarden collections.");
|
||||||
|
response.data.data.iter()
|
||||||
|
.map(|item| (item.id.clone(), item.name.clone()))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
Err(msg) => {
|
||||||
|
error!("Failed to get list of Bitwarden collections:\n{msg}");
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let folders: HashMap<String, String> = match crate::bitwarden_api::list_object_folders() {
|
||||||
|
Ok(response) => {
|
||||||
|
info!("Got list of Bitwarden folders.");
|
||||||
|
response.data.data.iter()
|
||||||
|
.filter(|item| item.id.is_some())
|
||||||
|
.map(|item| (item.id.as_ref().unwrap().clone(), item.name.clone()))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
Err(msg) => {
|
||||||
|
error!("Failed to get list of Bitwarden folders:\n{msg}");
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let title = get_title(&item, &folders, &collections);
|
||||||
|
println!("{}", title);
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
eprintln!("Could not find a field named '{}'", field);
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
error!("Login of Bitwarden item is none");
|
||||||
|
process::exit(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user