From 1f3ade6836adf5c61474c8c83c6810a1d6af7ae3 Mon Sep 17 00:00:00 2001 From: Marvin Vogt Date: Wed, 1 May 2024 20:50:07 +0000 Subject: [PATCH 1/2] Implement `get_sources` on config --- src/config.rs | 14 ++++++++++++-- src/lib.rs | 2 +- src/source/mod.rs | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/config.rs b/src/config.rs index 6f71ab2..979d368 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,4 @@ -use crate::Source; +use crate::{Github, Gitlab, Source}; use figment::{ providers::{Format, Serialized, Toml}, Figment, @@ -47,7 +47,17 @@ impl Config { /// Get the configured sources. #[must_use] pub fn get_sources(&self) -> HashMap> { - todo!() + self.sources + .iter() + .map(|source_config| { + let name = source_config.name.clone(); + let source: Box = match source_config.provider { + SourceType::Github => Box::new(Github::new(source_config.url.parse().unwrap())), + SourceType::Gitlab => Box::new(Gitlab::new(source_config.url.parse().unwrap())), + }; + (name, source) + }) + .collect() } /// Load the configuration from a TOML file, using defaults for values that were not provided. diff --git a/src/lib.rs b/src/lib.rs index e84a0da..ceafc98 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,7 @@ pub use config::Config; pub use core::*; pub use signer::{AllowedSignersEntry, AllowedSignersFile}; -pub use source::Source; +pub use source::{Github, Gitlab, Source}; pub mod cli; mod config; diff --git a/src/source/mod.rs b/src/source/mod.rs index 4008ec9..1ddbc90 100644 --- a/src/source/mod.rs +++ b/src/source/mod.rs @@ -1,3 +1,5 @@ +pub use github::Github; +pub use gitlab::Gitlab; pub use main::Source; mod github; From f0bd1037c2a50d46460a2118d7847be435ddd60b Mon Sep 17 00:00:00 2001 From: Marvin Vogt Date: Wed, 1 May 2024 21:08:07 +0000 Subject: [PATCH 2/2] Create `SourceMap` type alias for `HashMap>` --- src/cli/update.rs | 6 +++--- src/config.rs | 4 ++-- src/lib.rs | 2 +- src/source/main.rs | 4 ++++ src/source/mod.rs | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/cli/update.rs b/src/cli/update.rs index cbbf182..0c3a00d 100644 --- a/src/cli/update.rs +++ b/src/cli/update.rs @@ -1,6 +1,6 @@ //! The update subcommand used to get the latest allowed signers and write them to the output file. -use crate::{AllowedSignersEntry, Config, Source, SshPublicKey}; -use std::collections::{HashMap, HashSet}; +use crate::{AllowedSignersEntry, Config, SourceMap, SshPublicKey}; +use std::collections::HashSet; pub(super) fn update(config: Config) { let sources = config.get_sources(); @@ -16,6 +16,6 @@ pub(super) fn update(config: Config) { } } -fn get_public_keys(user: (), sources: &HashMap>) -> Vec { +fn get_public_keys(user: (), sources: &SourceMap) -> Vec { todo!("Retrieve public keys for a user from all sources."); } diff --git a/src/config.rs b/src/config.rs index 979d368..4b3c1eb 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,4 @@ -use crate::{Github, Gitlab, Source}; +use crate::{Github, Gitlab, Source, SourceMap}; use figment::{ providers::{Format, Serialized, Toml}, Figment, @@ -46,7 +46,7 @@ impl Default for Config { impl Config { /// Get the configured sources. #[must_use] - pub fn get_sources(&self) -> HashMap> { + pub fn get_sources(&self) -> SourceMap { self.sources .iter() .map(|source_config| { diff --git a/src/lib.rs b/src/lib.rs index ceafc98..3d5cd0c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,7 @@ pub use config::Config; pub use core::*; pub use signer::{AllowedSignersEntry, AllowedSignersFile}; -pub use source::{Github, Gitlab, Source}; +pub use source::{Github, Gitlab, Source, SourceMap}; pub mod cli; mod config; diff --git a/src/source/main.rs b/src/source/main.rs index 22190bf..e23cf33 100644 --- a/src/source/main.rs +++ b/src/source/main.rs @@ -1,5 +1,6 @@ use crate::SshPublicKey; use async_trait::async_trait; +use std::collections::HashMap; /// A source implements a way to get public keys from a Git provider. #[async_trait] @@ -11,3 +12,6 @@ pub trait Source { client: &reqwest::Client, ) -> Result, reqwest::Error>; } + +/// A `HashMap` containing named sources. +pub type SourceMap = HashMap>; diff --git a/src/source/mod.rs b/src/source/mod.rs index 1ddbc90..f5580df 100644 --- a/src/source/mod.rs +++ b/src/source/mod.rs @@ -1,6 +1,6 @@ pub use github::Github; pub use gitlab::Gitlab; -pub use main::Source; +pub use main::{Source, SourceMap}; mod github; mod gitlab;