cyrtophora

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 4559255a840fe7ca7833b337b208af6baa42fbae
parent 76ec658906e231b9c015321ceb5f22efb8284fe5
Author: Jackson G. Kaindume <seestem@merely.tech>
Date:   Mon, 29 Aug 2022 11:34:36 +0200

[phora] remove registration input validation from Account to RegistrationData

Diffstat:
Mphora/src/account.rs | 39++++++++++-----------------------------
Aphora/src/data.rs | 35+++++++++++++++++++++++++++++++++++
Mphora/src/lib.rs | 1+
3 files changed, 46 insertions(+), 29 deletions(-)

diff --git a/phora/src/account.rs b/phora/src/account.rs @@ -1,4 +1,5 @@ -use crate::validate::{Validate, ValidationError}; +use crate::data::RegistrationData; +use crate::validate::ValidationError; /// An account pub struct Account { @@ -11,37 +12,17 @@ pub struct Account { } impl Account { - /// Register new user - pub fn register( - username: &str, - password: &str, - email: Option<&str>, - ) -> Result<Self, ValidationError> { - let mut validated_email: Option<String> = None; + /// Create new account + pub fn create(payload: RegistrationData) -> Result<Self, ValidationError> { + payload.is_valid()?; - if !Validate::username(username) { - return Err(ValidationError::Username); - } - - if !Validate::password(password) { - return Err(ValidationError::Email); - } - - if let Some(email) = email { - if !Validate::email(email) { - return Err(ValidationError::Email); - } - validated_email = Some(email.to_string()); - - // TODO: email verification code - } - - // TODO: database registration code + // TODO: email verification + // TODO: database registration Ok(Account { - username: username.to_string(), - email: validated_email, - password: password.to_string(), + username: payload.username, + email: payload.email, + password: payload.password, }) } } diff --git a/phora/src/data.rs b/phora/src/data.rs @@ -0,0 +1,35 @@ +use crate::validate::{Validate, ValidationError}; +use serde::Deserialize; + +/// User registration Data +#[derive(Deserialize)] +pub struct RegistrationData { + pub username: String, + pub password: String, + pub retyped_password: String, + pub email: Option<String>, +} + +impl RegistrationData { + pub fn is_valid(&self) -> Result<(), ValidationError> { + if self.password != self.retyped_password { + return Err(ValidationError::Password); + } + + if !Validate::username(&self.username) { + return Err(ValidationError::Username); + } + + if !Validate::password(&self.password) { + return Err(ValidationError::Password); + } + + if let Some(email) = &self.email { + if !Validate::email(email) { + return Err(ValidationError::Email); + } + } + + Ok(()) + } +} diff --git a/phora/src/lib.rs b/phora/src/lib.rs @@ -1,3 +1,4 @@ mod account; mod crypto; +mod data; mod validate;