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.par_iter().map(|k| k.fetch()).flatten().collect(); 19 20 // Deduplicate keys, no need for duplicated entries 21 stream.sort(); 22 stream.dedup_by(|a, b| a.key_data() == b.key_data()); 23 24 (self.name.clone(), stream) 25 } 26} 27 28#[derive(Debug, serde::Deserialize)] 29pub struct Config { 30 #[serde(rename = "entry")] 31 pub entries: Box<[Entry]>, 32} 33 34impl Config { 35 pub fn fetch(&self) -> Result<Output, ()> { 36 let keys = self.entries.par_iter().map(Entry::fetch).collect(); 37 38 Ok(Output { keys }) 39 } 40}