summaryrefslogtreecommitdiff
path: root/src/api/auth.rs
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2023-01-28 18:04:00 -0500
committerTyler Murphy <tylermurphy534@gmail.com>2023-01-28 18:04:00 -0500
commitb58654fd70958d89b344a6f7acac204f67ae9879 (patch)
tree60a1960d0d265c9f661e633022164f33e099c81c /src/api/auth.rs
parentnew rust, clippy (diff)
downloadxssbook-b58654fd70958d89b344a6f7acac204f67ae9879.tar.gz
xssbook-b58654fd70958d89b344a6f7acac204f67ae9879.tar.bz2
xssbook-b58654fd70958d89b344a6f7acac204f67ae9879.zip
fmt
Diffstat (limited to '')
-rw-r--r--src/api/auth.rs90
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))
+}