diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-26 01:43:12 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-26 01:43:12 -0500 |
commit | cc5a3f9056fe1b563dbb40d51b1621769150c08d (patch) | |
tree | 127bb50ebb622783e4529764b6a2735cef1eb8c1 /teleterm-web | |
parent | 81fc5c6a2c6df38025961945cb496ccc4d432036 (diff) | |
download | teleterm-cc5a3f9056fe1b563dbb40d51b1621769150c08d.tar.gz teleterm-cc5a3f9056fe1b563dbb40d51b1621769150c08d.zip |
add a logout button
Diffstat (limited to 'teleterm-web')
-rw-r--r-- | teleterm-web/src/lib.rs | 2 | ||||
-rw-r--r-- | teleterm-web/src/model.rs | 17 | ||||
-rw-r--r-- | teleterm-web/src/views/page.rs | 4 |
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"]); } |