This commit is contained in:
JMARyA 2024-07-24 11:07:24 +02:00
parent 0d3df6bb64
commit dcf546fa9c
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
18 changed files with 3463 additions and 1 deletions

51
src/route/user.rs Normal file
View file

@ -0,0 +1,51 @@
use rocket::http::Status;
use mongod::Model;
use mongodb::bson::doc;
use rocket::outcome::Outcome;
use rocket::post;
use rocket::request::FromRequest;
use rocket::Request;
use serde_json::json;
use serde::Deserialize;
use rocket::serde::json::Json;
use crate::library::user::Session;
use crate::library::user::User;
use super::FallibleApiResponse;
use super::api_error;
#[rocket::async_trait]
impl<'r> FromRequest<'r> for User {
type Error = ();
async fn from_request(request: &'r Request<'_>) -> rocket::request::Outcome<Self, Self::Error> {
match request.headers().get_one("token") {
Some(key) => {
if let Some(session) = Session::find_one(doc! { "token": key} ).await {
let user = session.user.get().await;
Outcome::Success(user)
} else {
Outcome::Error((Status::Unauthorized, ()))
}
},
None => Outcome::Error((Status::Unauthorized, ())),
}
}
}
#[derive(Deserialize)]
pub struct LoginData {
pub username: String,
pub password: String
}
#[post("/login", data = "<login>")]
pub async fn login_route(login: Json<LoginData>) -> FallibleApiResponse {
let ses = User::login(&login.username, &login.password).await.ok_or_else(|| api_error("Login failed"))?;
Ok(json!({
"token": ses.token
}))
}