From b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 23 Nov 2019 16:10:04 -0500 Subject: start working on the login flow --- teleterm-web/src/lib.rs | 4 +++- teleterm-web/src/model.rs | 22 ++++++++++++++++++++++ teleterm-web/src/views.rs | 1 + teleterm-web/src/views/login.rs | 5 +++++ teleterm-web/src/views/page.rs | 4 +++- 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 teleterm-web/src/views/login.rs (limited to 'teleterm-web') diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs index 7b17421..4c2e366 100644 --- a/teleterm-web/src/lib.rs +++ b/teleterm-web/src/lib.rs @@ -10,6 +10,8 @@ use crate::prelude::*; #[allow(clippy::large_enum_variant)] #[derive(Clone)] enum Msg { + Login, + LoggedIn(seed::fetch::ResponseDataResult<()>), List(seed::fetch::ResponseDataResult>), Refresh, StartWatching(String), @@ -19,7 +21,7 @@ enum Msg { fn init(_: Url, orders: &mut impl Orders) -> Init { log::trace!("init"); - orders.send_msg(Msg::Refresh); + orders.send_msg(Msg::Login); Init::new(crate::model::Model::new(crate::config::Config::load())) } diff --git a/teleterm-web/src/model.rs b/teleterm-web/src/model.rs index e4919e4..9f28b2d 100644 --- a/teleterm-web/src/model.rs +++ b/teleterm-web/src/model.rs @@ -13,6 +13,7 @@ impl Drop for WatchConn { } pub(crate) struct Model { + logged_in: bool, config: crate::config::Config, sessions: Vec, watch_conn: Option, @@ -21,6 +22,7 @@ pub(crate) struct Model { impl Model { pub(crate) fn new(config: crate::config::Config) -> Self { Self { + logged_in: false, config, sessions: vec![], watch_conn: None, @@ -33,6 +35,22 @@ impl Model { orders: &mut impl Orders, ) { match msg { + crate::Msg::Login => { + log::debug!("logging in"); + let url = format!( + "http://{}/login?username=foo", + self.config.public_address + ); + orders.perform_cmd( + seed::Request::new(url) + .fetch_json_data(crate::Msg::LoggedIn), + ); + } + crate::Msg::LoggedIn(..) => { + log::debug!("logged in"); + self.logged_in = true; + orders.send_msg(crate::Msg::Refresh); + } crate::Msg::List(sessions) => match sessions { Ok(sessions) => { log::debug!("got sessions"); @@ -90,6 +108,10 @@ impl Model { } } + pub(crate) fn logged_in(&self) -> bool { + self.logged_in + } + pub(crate) fn title(&self) -> &str { &self.config.title } diff --git a/teleterm-web/src/views.rs b/teleterm-web/src/views.rs index 349a45c..20c4150 100644 --- a/teleterm-web/src/views.rs +++ b/teleterm-web/src/views.rs @@ -1,4 +1,5 @@ pub(crate) mod list; +pub(crate) mod login; pub(crate) mod page; pub(crate) mod sessions; pub(crate) mod terminal; diff --git a/teleterm-web/src/views/login.rs b/teleterm-web/src/views/login.rs new file mode 100644 index 0000000..4520477 --- /dev/null +++ b/teleterm-web/src/views/login.rs @@ -0,0 +1,5 @@ +use crate::prelude::*; + +pub(crate) fn render(_: &crate::model::Model) -> Vec> { + vec![seed::p!["logging in..."]] +} diff --git a/teleterm-web/src/views/page.rs b/teleterm-web/src/views/page.rs index e30e085..350e981 100644 --- a/teleterm-web/src/views/page.rs +++ b/teleterm-web/src/views/page.rs @@ -3,7 +3,9 @@ use crate::prelude::*; pub(crate) fn render(model: &crate::model::Model) -> Vec> { let mut view = vec![seed::h1![model.title()]]; - if model.watching() { + if !model.logged_in() { + view.extend(super::login::render(model)) + } else if model.watching() { view.extend(super::watch::render(model)) } else { view.extend(super::list::render(model)) -- cgit v1.2.3-54-g00ecf