aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm/src/web/login.rs
blob: 876cebe5dbb728fce2d1315743e1a0b54a5a4a36 (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
use gotham::state::FromState as _;

#[derive(
    serde::Deserialize,
    gotham_derive::StateData,
    gotham_derive::StaticResponseExtender,
)]
pub struct QueryParams {
    username: Option<String>,
}

#[derive(serde::Serialize)]
struct Response {
    username: Option<String>,
}

pub fn run(
    mut state: gotham::state::State,
) -> (gotham::state::State, hyper::Response<hyper::Body>) {
    let username = {
        let query_params = QueryParams::borrow_from(&state);
        query_params.username.clone()
    };
    let session = gotham::middleware::session::SessionData::<
        crate::web::SessionData,
    >::borrow_mut_from(&mut state);

    session.login = username.clone().map(|username| super::LoginState {
        username: username.clone(),
        auth: crate::protocol::Auth::plain(&username),
    });

    (
        state,
        hyper::Response::new(hyper::Body::from(
            serde_json::to_string(&Response { username }).unwrap(),
        )),
    )
}