diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-23 16:10:04 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-23 16:10:04 -0500 |
commit | b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16 (patch) | |
tree | d4adb7e59dd66e6a1f4a68e37fc2b12debbcc4b9 /teleterm-web | |
parent | aa346f8caf62c34ba6f45a4c99056a78b15d6651 (diff) | |
download | teleterm-b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16.tar.gz teleterm-b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16.zip |
start working on the login flow
Diffstat (limited to 'teleterm-web')
-rw-r--r-- | teleterm-web/src/lib.rs | 4 | ||||
-rw-r--r-- | teleterm-web/src/model.rs | 22 | ||||
-rw-r--r-- | teleterm-web/src/views.rs | 1 | ||||
-rw-r--r-- | teleterm-web/src/views/login.rs | 5 | ||||
-rw-r--r-- | teleterm-web/src/views/page.rs | 4 |
5 files changed, 34 insertions, 2 deletions
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<Vec<crate::protocol::Session>>), Refresh, StartWatching(String), @@ -19,7 +21,7 @@ enum Msg { fn init(_: Url, orders: &mut impl Orders<Msg>) -> Init<crate::model::Model> { 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<crate::protocol::Session>, watch_conn: Option<WatchConn>, @@ -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<crate::Msg>, ) { 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<Node<crate::Msg>> { + 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<Node<crate::Msg>> { 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)) |