diff options
Diffstat (limited to 'src/api/auth.rs')
-rw-r--r-- | src/api/auth.rs | 90 |
1 files changed, 63 insertions, 27 deletions
diff --git a/src/api/auth.rs b/src/api/auth.rs index 4656ca8..7f7cf9e 100644 --- a/src/api/auth.rs +++ b/src/api/auth.rs @@ -1,9 +1,14 @@ -use axum::{Router, routing::post, response::Response}; +use axum::{response::Response, routing::post, Router}; use serde::Deserialize; -use time::{OffsetDateTime, Duration}; -use tower_cookies::{Cookies, Cookie}; +use time::{Duration, OffsetDateTime}; +use tower_cookies::{Cookie, Cookies}; -use crate::types::{user::User, http::ResponseCode, session::Session, extract::{Json, AuthorizedUser, Check, CheckResult, Log}}; +use crate::types::{ + extract::{AuthorizedUser, Check, CheckResult, Json, Log}, + http::ResponseCode, + session::Session, + user::User, +}; #[derive(Deserialize, Debug)] pub struct RegistrationRequet { @@ -14,36 +19,69 @@ pub struct RegistrationRequet { pub gender: String, pub day: u8, pub month: u8, - pub year: u32 + pub year: u32, } impl Check for RegistrationRequet { fn check(&self) -> CheckResult { - Self::assert_length(&self.firstname, 1, 20, "First name can only by 1-20 characters long")?; - Self::assert_length(&self.lastname, 1, 20, "Last name can only by 1-20 characters long")?; + Self::assert_length( + &self.firstname, + 1, + 20, + "First name can only by 1-20 characters long", + )?; + Self::assert_length( + &self.lastname, + 1, + 20, + "Last name can only by 1-20 characters long", + )?; Self::assert_length(&self.email, 1, 50, "Email can only by 1-50 characters long")?; - Self::assert_length(&self.password, 1, 50, "Password can only by 1-50 characters long")?; - Self::assert_length(&self.gender, 1, 100, "Gender can only by 1-100 characters long")?; - Self::assert_range(u64::from(self.day), 1, 255, "Birthday day can only be between 1-255")?; - Self::assert_range(u64::from(self.month), 1, 255, "Birthday month can only be between 1-255")?; - Self::assert_range(u64::from(self.year), 1, 4_294_967_295, "Birthday year can only be between 1-4294967295")?; + Self::assert_length( + &self.password, + 1, + 50, + "Password can only by 1-50 characters long", + )?; + Self::assert_length( + &self.gender, + 1, + 100, + "Gender can only by 1-100 characters long", + )?; + Self::assert_range( + u64::from(self.day), + 1, + 255, + "Birthday day can only be between 1-255", + )?; + Self::assert_range( + u64::from(self.month), + 1, + 255, + "Birthday month can only be between 1-255", + )?; + Self::assert_range( + u64::from(self.year), + 1, + 4_294_967_295, + "Birthday year can only be between 1-4294967295", + )?; Ok(()) } } - async fn register(cookies: Cookies, Json(body): Json<RegistrationRequet>) -> Response { - let user = match User::new(body) { Ok(user) => user, - Err(err) => return err + Err(err) => return err, }; let session = match Session::new(user.user_id) { Ok(session) => session, - Err(err) => return err + Err(err) => return err, }; - + let mut now = OffsetDateTime::now_utc(); now += Duration::weeks(52); @@ -71,20 +109,19 @@ impl Check for LoginRequest { } async fn login(cookies: Cookies, Json(body): Json<LoginRequest>) -> Response { - let Ok(user) = User::from_email(&body.email) else { return ResponseCode::BadRequest.text("Email is not registered") }; if user.password != body.password { - return ResponseCode::BadRequest.text("Password is not correct") + return ResponseCode::BadRequest.text("Password is not correct"); } let session = match Session::new(user.user_id) { Ok(session) => session, - Err(err) => return err + Err(err) => return err, }; - + let mut now = OffsetDateTime::now_utc(); now += Duration::weeks(52); @@ -100,11 +137,10 @@ async fn login(cookies: Cookies, Json(body): Json<LoginRequest>) -> Response { } async fn logout(cookies: Cookies, AuthorizedUser(user): AuthorizedUser, _: Log) -> Response { - cookies.remove(Cookie::new("auth", "")); if let Err(err) = Session::delete(user.user_id) { - return err + return err; } ResponseCode::Success.text("Successfully logged out") @@ -112,7 +148,7 @@ async fn logout(cookies: Cookies, AuthorizedUser(user): AuthorizedUser, _: Log) pub fn router() -> Router { Router::new() - .route("/register", post(register)) - .route("/login", post(login)) - .route("/logout", post(logout)) -}
\ No newline at end of file + .route("/register", post(register)) + .route("/login", post(login)) + .route("/logout", post(logout)) +} |