diff options
Diffstat (limited to 'teleterm/src/oauth/recurse_center.rs')
-rw-r--r-- | teleterm/src/oauth/recurse_center.rs | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/teleterm/src/oauth/recurse_center.rs b/teleterm/src/oauth/recurse_center.rs deleted file mode 100644 index 6ab41ba..0000000 --- a/teleterm/src/oauth/recurse_center.rs +++ /dev/null @@ -1,90 +0,0 @@ -use crate::prelude::*; - -pub struct RecurseCenter { - client: oauth2::basic::BasicClient, - user_id: String, -} - -impl RecurseCenter { - pub fn new(config: super::Config, user_id: &str) -> Self { - Self { - client: config.into_basic_client(), - user_id: user_id.to_string(), - } - } - - pub fn config( - client_id: &str, - client_secret: &str, - redirect_url: &url::Url, - ) -> super::Config { - super::Config { - client_id: client_id.to_string(), - client_secret: client_secret.to_string(), - auth_url: url::Url::parse( - "https://www.recurse.com/oauth/authorize", - ) - .unwrap(), - token_url: url::Url::parse("https://www.recurse.com/oauth/token") - .unwrap(), - redirect_url: redirect_url.clone(), - } - } -} - -impl super::Oauth for RecurseCenter { - fn client(&self) -> &oauth2::basic::BasicClient { - &self.client - } - - fn user_id(&self) -> &str { - &self.user_id - } - - fn name(&self) -> &str { - crate::protocol::AuthType::RecurseCenter.name() - } - - fn get_username_from_access_token( - &self, - token: &str, - ) -> Box<dyn futures::Future<Item = String, Error = Error> + Send> { - let fut = reqwest::r#async::Client::new() - .get("https://www.recurse.com/api/v1/profiles/me") - .bearer_auth(token) - .send() - .context(crate::error::GetRecurseCenterProfile) - .and_then(|mut res| res.json().context(crate::error::ParseJson)) - .map(|user: User| user.name()); - Box::new(fut) - } -} - -#[derive(serde::Deserialize)] -struct User { - name: String, - stints: Vec<Stint>, -} - -#[derive(serde::Deserialize)] -struct Stint { - batch: Option<Batch>, - start_date: String, -} - -#[derive(serde::Deserialize)] -struct Batch { - short_name: String, -} - -impl User { - fn name(&self) -> String { - let latest_stint = - self.stints.iter().max_by_key(|s| &s.start_date).unwrap(); - if let Some(batch) = &latest_stint.batch { - format!("{} ({})", self.name, batch.short_name) - } else { - self.name.to_string() - } - } -} |