use crate::db::Database; use crate::identity::{IdKeyData, escape}; use std::path::Path; use std::process::exit; pub fn list_keys( db_path: &Path, local_only: bool, peer_only: bool, full_pks: bool, ) -> anyhow::Result<()> { if local_only && peer_only { eprintln!("cannot show only local and only peer keys, pick one"); exit(1); } let show_local = !peer_only; let show_peer = !full_pks; let db = Database::load_or_create(db_path)?; let mut displayed = 0; for key in &db.keys { match key.keys { IdKeyData::Local(_) => { if !show_local { continue; }; displayed += 1; println!("local: {:?}", key); } IdKeyData::Peer(_) => { if !show_peer { continue; }; displayed += 1; println!("peer: {:?}", key); } } if full_pks { println!( " pk: sage/{}/{}/{}", key.keys.pk()?, escape(key.name.clone()), escape(key.email.clone()) ); } else { println!(" id: {}", key.keys.keyid()?); } } if displayed == 0 { println!("no keys found"); } Ok(()) }