aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-26 11:41:15 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-26 11:45:05 -0500
commit1beada71234ff83d92e6e620edbfab4dcb760df5 (patch)
tree65f6955757fe9ab2f2a77edd9f5e89f021eb57f7
parent46fbf870d65e747787b70cbbd83f21766fed5231 (diff)
downloadteleterm-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.rs4
-rw-r--r--teleterm/src/web.rs12
-rw-r--r--teleterm/src/web/list.rs4
-rw-r--r--teleterm/src/web/login.rs5
-rw-r--r--teleterm/src/web/watch.rs4
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,