Files
imphnen-backend-service/imphnen-iam/src/v1/auth/auth_dto.rs
T

120 lines
3.5 KiB
Rust
Raw Normal View History

2025-05-21 19:37:30 +07:00
use crate::UsersDetailItemDto;
2025-02-08 00:58:54 +07:00
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
2025-04-06 19:15:01 +07:00
use validator::{Validate, ValidationError};
2025-02-08 00:58:54 +07:00
2025-04-06 19:15:01 +07:00
fn validate_password_complexity(password: &str) -> Result<(), ValidationError> {
2025-05-20 00:26:24 +07:00
let has_uppercase = password.chars().any(|c| c.is_ascii_uppercase());
let has_lowercase = password.chars().any(|c| c.is_ascii_lowercase());
let has_digit = password.chars().any(|c| c.is_ascii_digit());
let has_special = password.chars().any(|c| "@$!%*?&".contains(c));
if has_uppercase && has_lowercase && has_digit && has_special {
Ok(())
} else {
Err(ValidationError::new("complexity"))
}
2025-03-21 05:36:00 +07:00
}
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
2025-02-08 00:58:54 +07:00
pub struct AuthLoginRequestDto {
2025-03-21 05:36:00 +07:00
#[validate(
length(min = 1, message = "Email cannot be empty"),
email(message = "Email not valid")
)]
2025-02-08 00:58:54 +07:00
pub email: String,
2025-03-21 05:36:00 +07:00
#[validate(length(min = 1, message = "Password cannot be empty"))]
2025-02-08 00:58:54 +07:00
pub password: String,
}
2025-02-26 15:45:05 +07:00
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)]
2025-03-13 23:40:16 +07:00
pub struct AuthLoginResponsetDto {
pub token: TokenDto,
2025-05-20 00:26:24 +07:00
pub user: UsersDetailItemDto,
2025-03-13 23:40:16 +07:00
}
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)]
pub struct TokenDto {
pub access_token: String,
pub refresh_token: String,
2025-02-26 15:45:05 +07:00
}
2025-03-21 05:36:00 +07:00
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
2025-02-26 15:45:05 +07:00
pub struct AuthRegisterRequestDto {
2025-03-21 05:36:00 +07:00
#[validate(
length(min = 1, message = "Email cannot be empty"),
email(message = "Email not valid")
)]
2025-02-26 15:45:05 +07:00
pub email: String,
2025-03-21 05:36:00 +07:00
#[validate(length(
min = 8,
message = "Password must have at least 8 characters"
))]
2025-04-06 19:15:01 +07:00
#[validate(custom(
function = "validate_password_complexity",
2025-03-21 05:36:00 +07:00
message = "Password must include uppercase, lowercase, number, and special character"
))]
2025-02-26 15:45:05 +07:00
pub password: String,
2025-03-21 05:36:00 +07:00
#[validate(length(min = 2, message = "Fullname at least have 2 character"))]
2025-02-26 15:45:05 +07:00
pub fullname: String,
2025-03-21 05:36:00 +07:00
#[validate(length(min = 1, message = "Student type is required"))]
pub phone_number: String,
2025-03-18 14:13:53 +07:00
}
2025-03-21 05:36:00 +07:00
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
2025-03-19 23:17:50 +07:00
pub struct AuthVerifyEmailRequestDto {
2025-03-21 05:36:00 +07:00
#[validate(
length(min = 1, message = "Email cannot be empty"),
email(message = "Email not valid")
)]
2025-03-19 23:17:50 +07:00
pub email: String,
pub otp: u32,
}
2025-03-21 05:36:00 +07:00
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
2025-03-19 23:17:50 +07:00
pub struct AuthResendOtpRequestDto {
2025-03-21 05:36:00 +07:00
#[validate(
length(min = 1, message = "Email cannot be empty"),
email(message = "Email not valid")
)]
2025-03-19 23:17:50 +07:00
pub email: String,
}
2025-03-23 01:19:17 +07:00
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
pub struct AuthRefreshTokenRequestDto {
#[validate(length(min = 1, message = "Refresh token cannot be empty"))]
pub refresh_token: String,
}
2025-03-21 05:36:00 +07:00
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
2025-03-19 23:17:50 +07:00
pub struct AuthNewPasswordRequestDto {
2025-03-23 07:56:43 +07:00
#[validate(length(min = 1, message = "Token cannot be empty"))]
2025-05-21 19:37:30 +07:00
pub token: String,
#[validate(length(
min = 8,
message = "Password must have at least 8 characters"
))]
#[validate(custom(
function = "validate_password_complexity",
2025-03-21 05:36:00 +07:00
message = "Password must include uppercase, lowercase, number, and special character"
))]
2025-03-19 23:17:50 +07:00
pub password: String,
}
2025-03-21 05:36:00 +07:00
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
2025-03-19 23:17:50 +07:00
pub struct AuthSetNewPasswordRequestDto {
2025-03-21 05:36:00 +07:00
#[validate(
length(min = 1, message = "Email cannot be empty"),
email(message = "Email not valid")
)]
2025-03-19 23:17:50 +07:00
pub email: String,
2025-03-21 05:36:00 +07:00
#[validate(length(
min = 8,
message = "Password must have at least 8 characters"
))]
2025-05-21 19:37:30 +07:00
#[validate(custom(
function = "validate_password_complexity",
2025-03-21 05:36:00 +07:00
message = "Password must include uppercase, lowercase, number, and special character"
))]
2025-03-19 23:17:50 +07:00
pub password: String,
}