aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web/src/views/login.rs
blob: 7f84f4dc50b7ebe44e4fca5ad880f3f75c95af1c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use crate::prelude::*;

pub(crate) fn render(model: &crate::model::Model) -> Vec<Node<crate::Msg>> {
    let plain = model.allowed_login_method(crate::protocol::AuthType::Plain);
    let recurse_center_url = if model
        .allowed_login_method(crate::protocol::AuthType::RecurseCenter)
    {
        model.oauth_login_url(crate::protocol::AuthType::RecurseCenter)
    } else {
        None
    };

    let mut view = vec![];

    if plain {
        view.extend(render_plain());
    }
    if plain && recurse_center_url.is_some() {
        view.push(seed::p!["or"])
    }
    if let Some(url) = recurse_center_url {
        view.extend(render_recurse_center(&url));
    }

    view
}

fn render_plain() -> Vec<Node<crate::Msg>> {
    vec![seed::form![
        seed::label![seed::attrs! { At::For => "username" }, "username"],
        seed::input![seed::attrs! {
            At::Id => "username",
            At::Type => "text",
            At::AutoFocus => true.as_at_value(),
        }],
        seed::input![
            seed::attrs! { At::Type => "submit", At::Value => "login" }
        ],
        raw_ev(Ev::Submit, |event| {
            event.prevent_default();
            let username = seed::to_input(
                &seed::document().get_element_by_id("username").unwrap(),
            )
            .value();
            crate::Msg::Login(username)
        }),
    ]]
}

fn render_recurse_center(url: &str) -> Vec<Node<crate::Msg>> {
    vec![seed::a![
        seed::attrs! {
            At::Href => url,
        },
        "login via oauth"
    ]]
}