Fetch User Keys - simple tool for fetching SSH keys from various sources
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::*; 9 10#[derive(Debug, serde::Deserialize)] 11pub struct Entry { 12 pub name: String, 13 pub keys: Box<[Box<Source>]>, 14} 15 16impl Entry { 17 pub fn fetch(&self) -> (String, Vec<ssh_key::PublicKey>) { 18 let mut stream: Vec<_> = self.keys 19 .par_iter() 20 .map(|k| k.fetch()) 21 .flatten() 22 .collect(); 23 24 // Deduplicate keys, no need for duplicated entries 25 stream.sort(); 26 stream.dedup_by(|a, b| { 27 a.key_data() == b.key_data() 28 }); 29 30 (self.name.clone(), stream) 31 } 32} 33 34#[derive(Debug, serde::Deserialize)] 35pub struct Config { 36 #[serde(rename = "entry")] 37 pub entries: Box<[Entry]>, 38} 39 40impl Config { 41 pub fn fetch(&self) -> Result<Output, ()> { 42 let keys = self.entries 43 .par_iter() 44 .map(Entry::fetch) 45 .collect(); 46 47 Ok(Output { keys }) 48 } 49}