diff options
author | Toby Vincent <tobyv@tobyvin.dev> | 2024-03-27 21:24:42 -0500 |
---|---|---|
committer | Toby Vincent <tobyv@tobyvin.dev> | 2024-03-27 21:24:42 -0500 |
commit | b263c6637ce8b7c83e4d01d1ef2e90e195a155fb (patch) | |
tree | 407b4da8e86407db24318442aea211e1cabbc90d /src/model.rs | |
parent | e3cb1a5f3c57b3c857107f735651268e0a78692b (diff) |
feat: add login route and improved tests
Diffstat (limited to 'src/model.rs')
-rw-r--r-- | src/model.rs | 51 |
1 files changed, 23 insertions, 28 deletions
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<OffsetDateTime>, pub updated_at: Option<OffsetDateTime>, } -#[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<RegisterSchema> 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); |