From d26fe166b1f5fe2a5ea153a4d908598c61f4979b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 27 Nov 2019 12:15:39 -0500 Subject: implement logging in with the oauth tokens on the server side --- teleterm/src/server.rs | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'teleterm/src/server.rs') diff --git a/teleterm/src/server.rs b/teleterm/src/server.rs index f23fac2..866edac 100644 --- a/teleterm/src/server.rs +++ b/teleterm/src/server.rs @@ -633,6 +633,51 @@ impl Ok(Some(Box::new(fut))) } + fn handle_message_oauth_response_token( + &mut self, + conn: &mut Connection, + access_token: &str, + refresh_token: &str, + ) -> Result< + Option< + Box< + dyn futures::Future< + Item = (ConnectionState, crate::protocol::Message), + Error = Error, + > + Send, + >, + >, + > { + let client = conn.oauth_client.take().ok_or_else(|| { + Error::UnexpectedMessage { + message: crate::protocol::Message::oauth_response_token( + access_token, + refresh_token, + ), + } + })?; + + let term_info = conn.state.term_info().unwrap().clone(); + let access_token = access_token.to_string(); + let fut = client.save_tokens(&access_token, refresh_token).and_then( + move |_| { + client.get_username_from_access_token(&access_token).map( + |username| { + ( + ConnectionState::LoggedIn { + term_info, + username: username.clone(), + }, + crate::protocol::Message::logged_in(&username), + ) + }, + ) + }, + ); + + Ok(Some(Box::new(fut))) + } + fn handle_accepted_message( &mut self, conn: &mut Connection, @@ -676,6 +721,14 @@ impl crate::protocol::Message::OauthResponseCode { code } => { self.handle_message_oauth_response_code(conn, &code) } + crate::protocol::Message::OauthResponseToken { + access_token, + refresh_token, + } => self.handle_message_oauth_response_token( + conn, + &access_token, + &refresh_token, + ), m => Err(Error::UnauthenticatedMessage { message: m }), } } -- cgit v1.2.3-54-g00ecf