ssh_vault/cli/actions/
fingerprint.rs1use crate::cli::actions::Action;
2use crate::vault::{fingerprint, remote};
3use anyhow::Result;
4
5pub fn handle(action: Action) -> Result<()> {
11 match action {
12 Action::Fingerprint { key, user } => match (key, user) {
13 (Some(key), None) => {
14 let fingerprint = fingerprint::fingerprint(&key)?;
15 println!("{fingerprint}");
16 }
17 (None, Some(user)) => {
18 let keys = remote::get_keys(&user)?;
19 let fingerprints = fingerprint::get_remote_fingerprints(&keys, None)?;
20
21 let max_key_length = fingerprints
22 .iter()
23 .map(|f| f.key.len())
24 .max()
25 .unwrap_or_default();
26
27 for fingerprint in &fingerprints {
28 println!("{fingerprint:max_key_length$}");
29 }
30 }
31 (Some(key), Some(user)) => {
32 let key_number: Result<u32, _> = key.parse();
33 let keys = remote::get_keys(&user)?;
34
35 match key_number {
36 Ok(key) => {
37 let fingerprints = fingerprint::get_remote_fingerprints(&keys, Some(key))?;
38
39 let max_key_length = fingerprints
40 .iter()
41 .map(|f| f.key.len())
42 .max()
43 .unwrap_or_default();
44
45 for fingerprint in &fingerprints {
46 println!("{fingerprint:max_key_length$}");
47 }
48 }
49 Err(_) => {
50 eprintln!("When using -u, [-k N] must be a numeric key index.");
51 }
52 }
53 }
54 (None, None) => {
55 let fingerprints = fingerprint::fingerprints()?;
56
57 let max_key_length = fingerprints
58 .iter()
59 .map(|f| f.key.len())
60 .max()
61 .unwrap_or_default();
62
63 for fingerprint in &fingerprints {
64 println!("{fingerprint:max_key_length$}");
65 }
66 }
67 },
68 _ => unreachable!(),
69 }
70 Ok(())
71}