use db_keystore::{DbKeyStore, DbKeyStoreConfig};
use keyring_core::{Error, Result, api::CredentialStoreApi};
use std::collections::HashMap;
use zeroize::Zeroizing;
const SERVICE: &str = "bin_example";
fn main() -> Result<()> {
let config = DbKeyStoreConfig::default();
let store = DbKeyStore::new(config)?;
println!("using store at {}", store.path());
let entry = store.build(SERVICE, "textUser", None)?;
let password = Zeroizing::new("dromomeryx".to_string());
entry.set_password(password.as_str())?;
let binary_entry = store.build(SERVICE, "binUser", None)?;
let secret = Zeroizing::new(vec![0x00, 0xff, 0x80, 0x81, 0x82]);
binary_entry.set_secret(secret.as_slice())?;
let results = store.search(&HashMap::from([("service", SERVICE)]))?;
for entry in results.iter() {
let (service, user) = entry.get_specifiers().unwrap();
let _secret = Zeroizing::new(entry.get_secret().unwrap());
match entry.get_password() {
Ok(p) => {
let p = Zeroizing::new(p);
println!("{service}:{user} has password of length {}", p.len());
}
Err(Error::BadEncoding(buf)) => {
let buf = Zeroizing::new(buf);
println!("{service}:{user} has bin password of {} bytes", buf.len())
}
Err(e) => {
eprintln!("error: {e:?} at entry for {service}:{user}")
}
}
entry.delete_credential()?;
}
Ok(())
}