Start work on login form
This commit is contained in:
parent
4eb3ac6350
commit
1667c3295b
|
@ -10,7 +10,7 @@ futures = "0.3"
|
|||
tower = "0.4"
|
||||
tokio = { version = "1", features = [ "full" ] }
|
||||
hyper = { version = "0.14", features = [ "full" ] }
|
||||
axum = { version = "0.6", features = [ "headers", "http2", "macros", "tracing" ] }
|
||||
axum = { version = "0.6", features = [ "headers", "http2", "macros", "tracing", "json" ] }
|
||||
clap = { version = "4.3", features = [ "derive" ] }
|
||||
snafu = "0.7"
|
||||
log = "0.4"
|
||||
|
@ -20,7 +20,7 @@ env_logger = "0.10"
|
|||
ring = "0.16"
|
||||
hex = "0.4"
|
||||
chrono = { version = "0.4", features = [ "serde" ] }
|
||||
yunohost-api = { path = "yunohost-api" }
|
||||
yunohost-api = { path = "yunohost-api", features = [ "axum" ] }
|
||||
axum_typed_multipart = "0.8"
|
||||
async-trait = "0.1"
|
||||
serde = { version = "1", features = [ "derive" ] }
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
use axum::{
|
||||
extract::{FromRequest, Form, Json, Query},
|
||||
extract::{FromRequest, Form, Json, Query, State},
|
||||
http::{self, Request, StatusCode},
|
||||
response::{IntoResponse, Response},
|
||||
RequestExt,
|
||||
};
|
||||
use axum_typed_multipart::{TryFromMultipart, TypedMultipart};
|
||||
use yunohost_api::{Username, Password};
|
||||
|
||||
use crate::state::RoutableAppState;
|
||||
|
||||
#[derive(Debug, TryFromMultipart, Deserialize)]
|
||||
pub struct LoginForm {
|
||||
username: String,
|
||||
username: Username,
|
||||
#[allow(dead_code)]
|
||||
password: String,
|
||||
password: Password,
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
|
@ -52,6 +55,10 @@ where
|
|||
}
|
||||
|
||||
#[debug_handler]
|
||||
pub async fn route(form: LoginForm) -> String {
|
||||
format!("Welcome {}", form.username)
|
||||
pub async fn route(state: State<RoutableAppState>, form: LoginForm) -> String {
|
||||
if state.check_login(&form.username, &form.password).await.unwrap() {
|
||||
format!("Welcome {}", &form.username)
|
||||
} else {
|
||||
format!("Invalid login for {}", &form.username)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ mod login;
|
|||
pub fn router(subpath: Option<String>, state: RoutableAppState) -> Router {
|
||||
let app = Router::new()
|
||||
.route("/", get(index::route))
|
||||
.route("/login/", get(login::route))
|
||||
.route("/login/", post(login::route))
|
||||
.with_state(state);
|
||||
if let Some(p) = subpath {
|
||||
Router::new()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use snafu::prelude::*;
|
||||
use yunohost_api::YunohostUsers;
|
||||
use yunohost_api::{YunohostUsers, Username, Password};
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
|
@ -23,4 +23,8 @@ impl AppState {
|
|||
users: YunohostUsers::new(500).await.context(YunohostSnafu)?,
|
||||
})
|
||||
}
|
||||
|
||||
pub async fn check_login(&self, username: &Username, password: &Password) -> Result<bool, Error> {
|
||||
self.users.check_credentials(username, password).await.context(YunohostSnafu)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user