From b263c6637ce8b7c83e4d01d1ef2e90e195a155fb Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Wed, 27 Mar 2024 21:24:42 -0500 Subject: feat: add login route and improved tests --- src/model.rs | 51 +++++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 28 deletions(-) (limited to 'src/model.rs') diff --git a/src/model.rs b/src/model.rs index 51ce493..395cdd1 100644 --- a/src/model.rs +++ b/src/model.rs @@ -3,33 +3,41 @@ use std::str::FromStr; use serde::{Deserialize, Serialize}; use sqlx::FromRow; use time::OffsetDateTime; +use uuid::Uuid; use crate::Error; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, FromRow)] +#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, FromRow)] #[serde(rename_all = "camelCase")] pub struct User { - pub id: uuid::Uuid, + pub uuid: Uuid, pub name: String, pub email: String, #[serde(default, skip_serializing)] - pub password: String, + pub password_hash: String, pub created_at: Option, pub updated_at: Option, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct TokenClaims { - pub sub: String, - pub iat: usize, - pub exp: usize, + pub sub: Uuid, + pub exp: i64, +} + +impl TokenClaims { + pub fn new(sub: Uuid, max_age: time::Duration) -> Self { + Self { + sub, + exp: (time::OffsetDateTime::now_utc() + max_age).unix_timestamp(), + } + } } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RegisterSchema { pub name: String, pub email: String, - #[serde(default, skip_serializing)] pub password: String, } @@ -43,27 +51,14 @@ impl RegisterSchema { #[derive(Debug, Serialize, Deserialize)] pub struct LoginSchema { pub email: String, - #[serde(default, skip_serializing)] pub password: String, } -macro_rules! impl_from_superset { - ($from:tt, $to:ty, $($field:tt)*) => { - impl From<$from> for $to { - fn from(value: $from) -> Self { - let $from { - $($field)*, - .. - } = value; - - Self { - $($field)*, - } - } - } - }; +impl From for LoginSchema { + fn from(value: RegisterSchema) -> Self { + let RegisterSchema { + email, password, .. + } = value; + Self { email, password } + } } - -impl_from_superset!(User, RegisterSchema, name, email, password); -impl_from_superset!(User, LoginSchema, email, password); -impl_from_superset!(RegisterSchema, LoginSchema, email, password); -- cgit v1.2.3-70-g09d2