diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-26 11:41:15 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-26 11:45:05 -0500 |
commit | 1beada71234ff83d92e6e620edbfab4dcb760df5 (patch) | |
tree | 65f6955757fe9ab2f2a77edd9f5e89f021eb57f7 | |
parent | 46fbf870d65e747787b70cbbd83f21766fed5231 (diff) | |
download | teleterm-1beada71234ff83d92e6e620edbfab4dcb760df5.tar.gz teleterm-1beada71234ff83d92e6e620edbfab4dcb760df5.zip |
store more information about the login state
we need to know both who we are (so that the webface can display it) and
also how to log back in as that user (since oauth methods log back in
without specifying the username at all)
-rw-r--r-- | teleterm/src/protocol.rs | 4 | ||||
-rw-r--r-- | teleterm/src/web.rs | 12 | ||||
-rw-r--r-- | teleterm/src/web/list.rs | 4 | ||||
-rw-r--r-- | teleterm/src/web/login.rs | 5 | ||||
-rw-r--r-- | teleterm/src/web/watch.rs | 4 |
5 files changed, 20 insertions, 9 deletions
diff --git a/teleterm/src/protocol.rs b/teleterm/src/protocol.rs index 5633b8e..85aee31 100644 --- a/teleterm/src/protocol.rs +++ b/teleterm/src/protocol.rs @@ -185,7 +185,9 @@ impl std::convert::TryFrom<&str> for AuthType { } } -#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)] +#[derive( + Debug, Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, +)] pub enum Auth { Plain { username: String, diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index cfd33c5..48c8c3c 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -34,9 +34,15 @@ impl Config { } } +#[derive(Debug, serde::Deserialize, serde::Serialize)] +pub(crate) struct LoginState { + auth: crate::protocol::Auth, + username: String, +} + #[derive(Default, serde::Deserialize, serde::Serialize)] struct SessionData { - username: Option<String>, + login: Option<LoginState>, } #[derive(Debug, serde::Serialize)] @@ -62,9 +68,9 @@ impl<'a> WebConfig<'a> { } Ok(Self { username: session - .username + .login .as_ref() - .map(std::string::String::as_str), + .map(|login| login.username.as_str()), public_address: &config.public_address, allowed_login_methods: &config.allowed_login_methods, oauth_login_urls, diff --git a/teleterm/src/web/list.rs b/teleterm/src/web/list.rs index 2acc9e5..e35efac 100644 --- a/teleterm/src/web/list.rs +++ b/teleterm/src/web/list.rs @@ -8,8 +8,8 @@ pub fn run( let session = gotham::middleware::session::SessionData::< crate::web::SessionData, >::borrow_from(&state); - let auth = if let Some(username) = &session.username { - crate::protocol::Auth::plain(username) + let auth = if let Some(login) = &session.login { + &login.auth } else { return ( state, diff --git a/teleterm/src/web/login.rs b/teleterm/src/web/login.rs index decc972..876cebe 100644 --- a/teleterm/src/web/login.rs +++ b/teleterm/src/web/login.rs @@ -25,7 +25,10 @@ pub fn run( crate::web::SessionData, >::borrow_mut_from(&mut state); - session.username = username.clone(); + session.login = username.clone().map(|username| super::LoginState { + username: username.clone(), + auth: crate::protocol::Auth::plain(&username), + }); ( state, diff --git a/teleterm/src/web/watch.rs b/teleterm/src/web/watch.rs index 8f59704..bb44639 100644 --- a/teleterm/src/web/watch.rs +++ b/teleterm/src/web/watch.rs @@ -18,8 +18,8 @@ pub fn run( let session = gotham::middleware::session::SessionData::< crate::web::SessionData, >::borrow_from(&state); - let auth = if let Some(username) = &session.username { - crate::protocol::Auth::plain(username) + let auth = if let Some(login) = &session.login { + login.auth.clone() } else { return ( state, |