aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-26 01:43:12 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-26 01:43:12 -0500
commitcc5a3f9056fe1b563dbb40d51b1621769150c08d (patch)
tree127bb50ebb622783e4529764b6a2735cef1eb8c1 /teleterm-web
parent81fc5c6a2c6df38025961945cb496ccc4d432036 (diff)
downloadteleterm-cc5a3f9056fe1b563dbb40d51b1621769150c08d.tar.gz
teleterm-cc5a3f9056fe1b563dbb40d51b1621769150c08d.zip
add a logout button
Diffstat (limited to 'teleterm-web')
-rw-r--r--teleterm-web/src/lib.rs2
-rw-r--r--teleterm-web/src/model.rs17
-rw-r--r--teleterm-web/src/views/page.rs4
3 files changed, 23 insertions, 0 deletions
diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs
index 1e44d98..4fbd403 100644
--- a/teleterm-web/src/lib.rs
+++ b/teleterm-web/src/lib.rs
@@ -17,6 +17,8 @@ enum Msg {
StartWatching(String),
Watch(String, crate::ws::WebSocketEvent),
StopWatching,
+ Logout,
+ LoggedOut(seed::fetch::FetchObject<()>),
}
fn init(_: Url, orders: &mut impl Orders<Msg>) -> Init<crate::model::Model> {
diff --git a/teleterm-web/src/model.rs b/teleterm-web/src/model.rs
index 9c611b6..05e3152 100644
--- a/teleterm-web/src/model.rs
+++ b/teleterm-web/src/model.rs
@@ -120,8 +120,18 @@ impl Model {
}
},
crate::Msg::StopWatching => {
+ log::debug!("stop watching");
self.list(orders);
}
+ crate::Msg::Logout => {
+ log::debug!("logout");
+ self.logout(orders);
+ }
+ crate::Msg::LoggedOut(..) => {
+ log::debug!("logged out");
+ self.config.username = None;
+ self.state = State::Login;
+ }
}
}
@@ -201,6 +211,13 @@ impl Model {
self.state = State::Watch(WatchConn::new(ws));
}
+ fn logout(&self, orders: &mut impl Orders<crate::Msg>) {
+ let url = format!("http://{}/logout", self.config.public_address);
+ orders.perform_cmd(
+ seed::Request::new(url).fetch(crate::Msg::LoggedOut),
+ );
+ }
+
fn process(&mut self, bytes: &[u8]) {
if let State::Watch(conn) = &mut self.state {
conn.term.process(bytes);
diff --git a/teleterm-web/src/views/page.rs b/teleterm-web/src/views/page.rs
index 41ad5ca..677a2c9 100644
--- a/teleterm-web/src/views/page.rs
+++ b/teleterm-web/src/views/page.rs
@@ -5,6 +5,10 @@ pub(crate) fn render(model: &crate::model::Model) -> Vec<Node<crate::Msg>> {
if let Some(username) = model.username() {
view.push(seed::p!["logged in as ", username]);
+ view.push(seed::button![
+ simple_ev(Ev::Click, crate::Msg::Logout),
+ "logout"
+ ]);
} else {
view.push(seed::p!["not logged in"]);
}