bitwarden_importers/importers/onepassword/convert/
ssh_key.rs1use bitwarden_exporters::SshKey;
4use bitwarden_ssh::import::import_key;
5
6use super::{
7 claimed::{Claimed, section_fields},
8 value::{non_blank, render_value},
9};
10use crate::importers::onepassword::access::wire::VaultItemDetails;
11
12pub(super) fn ssh_key(details: &VaultItemDetails) -> Option<(SshKey, Claimed)> {
19 section_fields(details)
20 .enumerate()
21 .find_map(|(position, field)| {
22 let attributes = field.attributes.as_ref()?.ssh_key.as_ref()?;
23 let private_key = non_blank(attributes.private_key.as_deref()?)?;
24 if field
26 .value
27 .as_ref()
28 .and_then(|value| render_value(field.kind.as_deref(), value))
29 .is_some_and(|value| value != private_key)
30 {
31 return None;
32 }
33 let key = import_key(private_key.to_string(), None).ok()?;
35
36 let key = SshKey {
37 private_key: key.private_key,
38 public_key: key.public_key,
39 fingerprint: key.fingerprint,
40 };
41 let claimed = Claimed {
42 designations: &[],
43 fields: vec![position],
44 };
45
46 Some((key, claimed))
47 })
48}