diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-27 11:29:09 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-27 11:29:09 -0500 |
commit | a7ebc62a80933a73eae2282827e74dfaeb107820 (patch) | |
tree | ab3c9972f36926e67961eb09e23a700cba7479c2 /teleterm | |
parent | a7b13be27b7398c84296ef82ba60b7a441a3fb0f (diff) | |
download | teleterm-a7ebc62a80933a73eae2282827e74dfaeb107820.tar.gz teleterm-a7ebc62a80933a73eae2282827e74dfaeb107820.zip |
calculate the redirect_url for web oauth too
a bit more complicated because it needs to use the configured
public_address, etc
Diffstat (limited to 'teleterm')
-rw-r--r-- | teleterm/src/cmd/web.rs | 17 | ||||
-rw-r--r-- | teleterm/src/config.rs | 20 | ||||
-rw-r--r-- | teleterm/src/oauth.rs | 4 |
3 files changed, 23 insertions, 18 deletions
diff --git a/teleterm/src/cmd/web.rs b/teleterm/src/cmd/web.rs index 889179b..a9dc830 100644 --- a/teleterm/src/cmd/web.rs +++ b/teleterm/src/cmd/web.rs @@ -38,9 +38,20 @@ impl crate::config::Config for Config { self.oauth_configs .iter() .filter_map(|(ty, configs)| { - configs - .get(&crate::protocol::AuthClient::Web) - .map(|config| (*ty, config.clone())) + configs.get(&crate::protocol::AuthClient::Web).map( + |config| { + let mut config = config.clone(); + // TODO: tls + let url = url::Url::parse(&format!( + "http://{}/oauth/{}", + self.web.public_address, + ty.name() + )) + .unwrap(); + config.set_redirect_url(url); + (*ty, config) + }, + ) }) .collect(), )) diff --git a/teleterm/src/config.rs b/teleterm/src/config.rs index 4000cb7..95d5366 100644 --- a/teleterm/src/config.rs +++ b/teleterm/src/config.rs @@ -913,22 +913,12 @@ where auth_client, }) .map_err(serde::de::Error::custom)?; + // this is wrong for Web configs, but it gets fixed up + // later since we need to calculate the real value from + // other parts of the config let redirect_url = - if auth_client == crate::protocol::AuthClient::Cli { - url::Url::parse(crate::oauth::CLI_REDIRECT_URL) - .unwrap() - } else { - config - .redirect_url - .context( - crate::error::OauthMissingConfiguration { - field: "redirect_url", - auth_type, - auth_client, - }, - ) - .map_err(serde::de::Error::custom)? - }; + url::Url::parse(crate::oauth::CLI_REDIRECT_URL) + .unwrap(); crate::oauth::RecurseCenter::config( &client_id, &client_secret, diff --git a/teleterm/src/oauth.rs b/teleterm/src/oauth.rs index 5283957..4e4ad72 100644 --- a/teleterm/src/oauth.rs +++ b/teleterm/src/oauth.rs @@ -145,6 +145,10 @@ pub struct Config { } impl Config { + pub fn set_redirect_url(&mut self, url: url::Url) { + self.redirect_url = url; + } + fn into_basic_client(self) -> oauth2::basic::BasicClient { oauth2::basic::BasicClient::new( oauth2::ClientId::new(self.client_id), |