Fetch User Keys - simple tool for fetching SSH keys from various sources
at master 1.0 kB view raw
1// SPDX-FileCopyrightText: 2024 Łukasz Niemier <#@hauleth.dev> 2// 3// SPDX-License-Identifier: EUPL-1.2 4 5use crate::output::Output; 6use crate::sources::*; 7 8use rayon::prelude::*; 9use simple_eyre::eyre::Result; 10 11#[derive(Debug, serde::Deserialize)] 12pub struct Entry { 13 pub name: String, 14 pub keys: Box<[Source]>, 15} 16 17impl Entry { 18 pub fn fetch(self) -> Result<(String, Vec<ssh_key::PublicKey>)> { 19 let mut stream: Vec<ssh_key::PublicKey> = self 20 .keys 21 .par_iter() 22 .flat_map(|k| k.fetch().unwrap()) 23 .collect(); 24 25 // Deduplicate keys, no need for duplicated entries 26 stream.sort(); 27 stream.dedup_by(|a, b| a.key_data() == b.key_data()); 28 29 Ok((self.name.clone(), stream)) 30 } 31} 32 33#[derive(Debug, serde::Deserialize)] 34pub struct Config { 35 #[serde(rename = "entry")] 36 pub entries: Box<[Entry]>, 37} 38 39impl Config { 40 pub fn fetch(self) -> Result<Output> { 41 self.entries.into_par_iter().map(Entry::fetch).collect() 42 } 43}