aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-23 16:10:04 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-23 16:10:04 -0500
commitb28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16 (patch)
treed4adb7e59dd66e6a1f4a68e37fc2b12debbcc4b9 /teleterm-web
parentaa346f8caf62c34ba6f45a4c99056a78b15d6651 (diff)
downloadteleterm-b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16.tar.gz
teleterm-b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16.zip
start working on the login flow
Diffstat (limited to 'teleterm-web')
-rw-r--r--teleterm-web/src/lib.rs4
-rw-r--r--teleterm-web/src/model.rs22
-rw-r--r--teleterm-web/src/views.rs1
-rw-r--r--teleterm-web/src/views/login.rs5
-rw-r--r--teleterm-web/src/views/page.rs4
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))