ssh_vault/vault/
online.rs1use anyhow::Result;
2use base58::ToBase58;
3use ssh_key::{HashAlg, PublicKey};
4use std::fmt::Write;
5
6pub fn get_private_key_id(key: &PublicKey, user: &str) -> Result<String> {
12 match user {
13 "new" => {
14 let fingerprint = key.fingerprint(HashAlg::Sha256);
15 let mut url = String::from("https://ssh-keys.online/key/");
16 write!(url, "{}", fingerprint.as_bytes().to_base58())?;
17 Ok(url)
18 }
19 _ => Ok(String::new()),
20 }
21}
22
23#[cfg(test)]
24#[allow(clippy::unwrap_used)]
25mod tests {
26 use super::*;
27 use ssh_key::PublicKey;
28
29 #[test]
30 fn test_get_private_key_id() {
31 let key = PublicKey::from_openssh(
32 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIlI7XymEyB/xiPQGEuiIzt7z5VDNDzuYpr3v6+hbyDN",
33 )
34 .unwrap();
35 let id = get_private_key_id(&key, "new").unwrap();
36 assert_eq!(
37 id,
38 "https://ssh-keys.online/key/59fKS1A4ZEQysHCbWSKUkR4n3a9pfN8g8BLwrp1eVJis"
39 );
40 }
41
42 #[test]
43 fn test_get_private_key_id_random_user() {
44 let key = PublicKey::from_openssh(
45 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIlI7XymEyB/xiPQGEuiIzt7z5VDNDzuYpr3v6+hbyDN",
46 )
47 .unwrap();
48 let id = get_private_key_id(&key, "random").unwrap();
49 assert_eq!(id, "");
50 }
51}