commit 81af424e52bab8230621e47c360f9ca1061bdd9a
parent 9144905b406ab6f789a455c884385b35e73bf72d
Author: Jackson G. Kaindume <seestem@merely.tech>
Date: Sun, 21 Aug 2022 13:44:31 +0200
rename validator.rs to validate.rs
Diffstat:
M | src/lib.rs | | | 4 | ++-- |
A | src/validate.rs | | | 146 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
D | src/validator.rs | | | 77 | ----------------------------------------------------------------------------- |
3 files changed, 148 insertions(+), 79 deletions(-)
diff --git a/src/lib.rs b/src/lib.rs
@@ -1,3 +1,3 @@
+mod account;
mod crypto;
-mod accounts;
-mod validator;
+mod validate;
diff --git a/src/validate.rs b/src/validate.rs
@@ -0,0 +1,146 @@
+pub struct Validate;
+
+impl Validate {
+ /// Validate username (using Twitter style usernames)
+ pub fn username(username: &str) -> bool {
+ // Username cannot be empty
+ if username.is_empty() {
+ return false;
+ }
+
+ // Username length cannot be greater than 15 characters
+ if username.len() > 15 {
+ return false;
+ }
+
+ let chars: Vec<char> = username.chars().collect();
+ let mut underscore_count = 0;
+
+ for i in 0..chars.len() {
+ // Username cannot start with a underscore (_)
+ if i == 0 && chars[i] == '_' {
+ return false;
+ }
+
+ // Username can only contain letters, numbers, and one underscore
+ if chars[i] != '_' {
+ if !chars[i].is_ascii_alphanumeric() {
+ return false;
+ }
+ } else {
+ // Count underscores because username can have only one [ _ ] underscore
+ underscore_count += 1;
+ }
+ }
+
+ // Username can have only one [ _ ] underscore
+ if underscore_count > 1 {
+ return false;
+ }
+ true
+ }
+
+ /// TODO: better email validation
+ pub fn email(email: &str) -> bool {
+ // Email address cannot be empty
+ if email.is_empty() {
+ return false;
+ }
+
+ // Email address should contain @ and . symbols
+ if !email.contains('@') || !email.contains('.') {
+ return false;
+ }
+ true
+ }
+
+ /// TODO: better password validation
+ pub fn password(password: &str) -> bool {
+ // Password should be at least 10 characters long
+ if password.len() < 10 {
+ return false;
+ }
+ true
+ }
+}
+
+use std::fmt;
+
+#[derive(Debug)]
+pub enum ValidationError {
+ Username,
+ Email,
+ Password,
+}
+
+impl std::error::Error for ValidationError {}
+
+impl fmt::Display for ValidationError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+ ValidationError::Username => write!(f, "Invalid username"),
+ ValidationError::Email => write!(f, "Invalid email"),
+ ValidationError::Password => write!(f, "Invalid password"),
+ }
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn username_validation() {
+ let valid_username = "firephoenix";
+ let valid_username1 = "natty_dread";
+ let valid_username2 = "ironlion_ironii";
+ let invalid_username = "";
+ let invalid_username1 = "natty_dread_iron";
+ let invalid_username2 = "_natty_dread_iron";
+ let invalid_username3 = "nattydre@d";
+ let invalid_username4 = "nattydread$";
+ let invalid_username5 = "firephoenixfirephoenixfirephoenixfirephoenixfirephoenix";
+
+ assert!(Validate::username(valid_username));
+ assert!(Validate::username(valid_username1));
+ assert!(Validate::username(valid_username2));
+
+ // username cannot be empty
+ assert!(!Validate::username(invalid_username));
+ // username cannot contain more than 1 underscore
+ assert!(!Validate::username(invalid_username1));
+ // username cannot start with an underscore
+ assert!(!Validate::username(invalid_username2));
+ // username cannot contain special symbols (only the _ is allowed)
+ assert!(!Validate::username(invalid_username3));
+ assert!(!Validate::username(invalid_username4));
+ // username cannot be more than 15 characters long
+ assert!(!Validate::username(invalid_username5));
+ }
+
+ #[test]
+ fn email_validation() {
+ let valid_email = "example@example.com";
+ let valid_email1 = "test@gmail.com";
+ let invalid_email = "kdkdf dfkfd@uurt";
+ let invalid_email2 = "lolz.lolz";
+ let invalid_email3 = "lolz@lolz";
+
+ assert!(Validate::email(valid_email));
+ assert!(Validate::email(valid_email1));
+
+ assert!(!Validate::email(invalid_email));
+ assert!(!Validate::email(invalid_email2));
+ assert!(!Validate::email(invalid_email3));
+ }
+
+ #[test]
+ fn password_validation() {
+ let valid_password = "passwordShoul be at least 10 chars";
+ let invalid_password = "lolz";
+
+ assert!(Validate::password(valid_password));
+ // Password should be at least 10 characters long
+ assert!(!Validate::password(invalid_password));
+ }
+}
diff --git a/src/validator.rs b/src/validator.rs
@@ -1,77 +0,0 @@
-pub struct Validator;
-
-impl Validator {
- /// Validate username (using Twitter style usernames)
- pub fn username(username: &str) -> bool {
- // Username cannot be empty
- if username.is_empty() {
- return false;
- }
-
- // Username length cannot be greater than 15 characters
- if username.len() > 15 {
- return false;
- }
-
- let chars: Vec<char> = username.chars().collect();
- let mut underscore_count = 0;
-
- for i in 0..chars.len() {
- // Username cannot start with a underscore (_)
- if i == 0 && chars[i] == '_' {
- return false;
- }
-
- // Username can only contain letters, numbers, and one underscore
- if chars[i] != '_' {
- if !chars[i].is_ascii_alphanumeric() {
- return false;
- }
- } else {
- // Count underscores because username can have only one [ _ ] underscore
- underscore_count += 1;
- }
- }
-
- // Username can have only one [ _ ] underscore
- if underscore_count > 1 {
- return false;
- }
-
- true
- }
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
-
- #[test]
- fn username_validation() {
- let valid_username = "firephoenix";
- let valid_username1 = "natty_dread";
- let valid_username2 = "ironlion_ironii";
- let invalid_username = "";
- let invalid_username1 = "natty_dread_iron";
- let invalid_username2 = "_natty_dread_iron";
- let invalid_username3 = "nattydre@d";
- let invalid_username4 = "nattydread$";
- let invalid_username5 = "firephoenixfirephoenixfirephoenixfirephoenixfirephoenix";
-
- assert!(Validator::username(valid_username));
- assert!(Validator::username(valid_username1));
- assert!(Validator::username(valid_username2));
-
- // username cannot be empty
- assert!(!Validator::username(invalid_username));
- // username cannot contain more than 1 underscore
- assert!(!Validator::username(invalid_username1));
- // username cannot start with an underscore
- assert!(!Validator::username(invalid_username2));
- // username cannot contain special symbols (only the _ is allowed)
- assert!(!Validator::username(invalid_username3));
- assert!(!Validator::username(invalid_username4));
- // username cannot be more than 15 characters long
- assert!(!Validator::username(invalid_username5));
- }
-}