From 46fbf870d65e747787b70cbbd83f21766fed5231 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 26 Nov 2019 11:38:43 -0500 Subject: simplify oauth url handling --- teleterm/src/cmd/web.rs | 9 ++++++++- teleterm/src/web.rs | 28 ++++++++++++++-------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/teleterm/src/cmd/web.rs b/teleterm/src/cmd/web.rs index 637d1ff..889179b 100644 --- a/teleterm/src/cmd/web.rs +++ b/teleterm/src/cmd/web.rs @@ -35,7 +35,14 @@ impl crate::config::Config for Config { self.web.public_address.clone(), self.web.server_address.clone(), self.web.allowed_login_methods.clone(), - self.oauth_configs.clone(), + self.oauth_configs + .iter() + .filter_map(|(ty, configs)| { + configs + .get(&crate::protocol::AuthClient::Web) + .map(|config| (*ty, config.clone())) + }) + .collect(), )) } } diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index 690d8a3..cfd33c5 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -19,13 +19,21 @@ struct Config { std::collections::HashSet, oauth_configs: std::collections::HashMap< crate::protocol::AuthType, - std::collections::HashMap< - crate::protocol::AuthClient, - crate::oauth::Config, - >, + crate::oauth::Config, >, } +impl Config { + fn allowed_oauth_login_methods( + &self, + ) -> impl Iterator + '_ { + self.allowed_login_methods + .iter() + .copied() + .filter(|ty| ty.is_oauth()) + } +} + #[derive(Default, serde::Deserialize, serde::Serialize)] struct SessionData { username: Option, @@ -44,15 +52,10 @@ struct WebConfig<'a> { impl<'a> WebConfig<'a> { fn new(config: &'a Config, session: &'a SessionData) -> Result { let mut oauth_login_urls = std::collections::HashMap::new(); - for ty in crate::protocol::AuthType::iter().filter(|ty| { - ty.is_oauth() && config.allowed_login_methods.contains(ty) - }) { + for ty in config.allowed_oauth_login_methods() { let oauth_config = config .oauth_configs .get(&ty) - .and_then(|configs| { - configs.get(&crate::protocol::AuthClient::Web) - }) .context(crate::error::AuthTypeMissingOauthConfig { ty })?; let client = ty.oauth_client(oauth_config, None).unwrap(); oauth_login_urls.insert(ty, client.generate_authorize_url()); @@ -83,10 +86,7 @@ impl Server { >, oauth_configs: std::collections::HashMap< crate::protocol::AuthType, - std::collections::HashMap< - crate::protocol::AuthClient, - crate::oauth::Config, - >, + crate::oauth::Config, >, ) -> Self { let data = Config { -- cgit v1.2.3