aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-26 11:38:43 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-26 11:38:43 -0500
commit46fbf870d65e747787b70cbbd83f21766fed5231 (patch)
tree1d650fbf02e6a79afccb482b64704d18086e73d3
parent51453db606c9b4272ab29f33c78b148c1cc2e1cc (diff)
downloadteleterm-46fbf870d65e747787b70cbbd83f21766fed5231.tar.gz
teleterm-46fbf870d65e747787b70cbbd83f21766fed5231.zip
simplify oauth url handling
-rw-r--r--teleterm/src/cmd/web.rs9
-rw-r--r--teleterm/src/web.rs28
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<crate::protocol::AuthType>,
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<Item = crate::protocol::AuthType> + '_ {
+ self.allowed_login_methods
+ .iter()
+ .copied()
+ .filter(|ty| ty.is_oauth())
+ }
+}
+
#[derive(Default, serde::Deserialize, serde::Serialize)]
struct SessionData {
username: Option<String>,
@@ -44,15 +52,10 @@ struct WebConfig<'a> {
impl<'a> WebConfig<'a> {
fn new(config: &'a Config, session: &'a SessionData) -> Result<Self> {
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 {