Skip to main content

shared/domain/auth/
model.rs

1use serde::Deserialize;
2use utoipa::ToSchema;
3use validator::Validate;
4
5use super::validation::validate_password;
6use crate::config::PasswordRequirements;
7
8#[derive(Debug, Validate, Deserialize, ToSchema)]
9#[schema(example = json!({"token": "edc365fa5e13751XXXXXXX"}))]
10pub struct TokenQuery {
11    #[schema(value_type = String, format = Password)]
12    pub token: secrecy::SecretString,
13}
14
15#[derive(Debug, Deserialize, Validate, ToSchema)]
16#[validate(context = "PasswordRequirements")]
17#[schema(example = json!({"email": "example@email.com", "password": "password"}))]
18pub struct LoginRequest {
19    #[validate(email)]
20    pub email: String,
21    #[validate(custom(function = "validate_password", use_context))]
22    pub password: String,
23}
24
25#[derive(Debug, Deserialize, Validate, ToSchema)]
26#[validate(context = "PasswordRequirements")]
27#[schema(example = json!({"username": "name", "email": "example@email.com", "password": "password"}))]
28pub struct RegisterRequest {
29    pub username: String,
30    #[validate(email)]
31    pub email: String,
32    #[validate(custom(function = "validate_password", use_context))]
33    pub password: String,
34}
35
36#[derive(Debug, Deserialize, Validate, ToSchema)]
37#[validate(context = "PasswordRequirements")]
38#[schema(example = json!({"token": String::default(), "csrf_token": String::default(), "password": String::default()}))]
39pub struct ResetPasswordRequest {
40    #[schema(value_type = String, format = Password)]
41    pub token: secrecy::SecretString,
42
43    #[schema(value_type = String, format = Password)]
44    pub csrf_token: secrecy::SecretString,
45
46    #[validate(custom(function = "validate_password", use_context))]
47    pub password: String,
48}