1
0
Fork 0

Validate user sign up

This commit is contained in:
Alex Kotov 2020-10-15 07:29:27 +05:00
parent 5db858bb19
commit ada528b059
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
4 changed files with 88 additions and 2 deletions

1
Cargo.lock generated
View File

@ -360,6 +360,7 @@ dependencies = [
"bcrypt",
"diesel",
"r2d2",
"regex",
"rocket",
"rocket_contrib",
"serde",

View File

@ -15,6 +15,7 @@ publish = true
[dependencies]
bcrypt = "0.8.2"
r2d2 = "0.8.9"
regex = "1.4.1"
rocket = "0.4.5"
serde = "1.0"
serde_derive = "1.0"

View File

@ -1,3 +1,6 @@
const PASSWORD_MIN_LENGTH: usize = 8;
const PASSWORD_MAX_LENGTH: usize = 128;
#[derive(FromForm)]
pub struct UserSignUp {
pub username: String,
@ -6,6 +9,12 @@ pub struct UserSignUp {
impl UserSignUp {
pub fn is_valid(&self) -> bool {
true
let username_re = regex::Regex::new(r"^[a-z][a-z0-9]{3,}$").unwrap();
let not_password_re = regex::Regex::new(r"^\s*$").unwrap();
username_re.is_match(self.username.as_str()) &&
!not_password_re.is_match(self.password.as_str()) &&
self.password.len() >= PASSWORD_MIN_LENGTH &&
self.password.len() <= PASSWORD_MAX_LENGTH
}
}

View File

@ -1,5 +1,5 @@
#[cfg(test)]
mod test {
mod requests {
use crate::config;
use crate::web;
@ -20,3 +20,78 @@ mod test {
assert_eq!(response.status(), Status::Ok);
}
}
#[cfg(test)]
mod forms {
use crate::forms;
#[test]
fn user_sign_up() {
let form = forms::UserSignUp {
username: "kotovalexarian".to_string(),
password: "q1w2e3r4t5y6".to_string(),
};
assert_eq!(form.is_valid(), true);
}
#[test]
fn user_sign_up_with_empty_username() {
let form = forms::UserSignUp {
username: "".to_string(),
password: "q1w2e3r4t5y6".to_string(),
};
assert_eq!(form.is_valid(), false);
}
#[test]
fn user_sign_up_with_blank_username() {
let form = forms::UserSignUp {
username: " ".to_string(),
password: "q1w2e3r4t5y6".to_string(),
};
assert_eq!(form.is_valid(), false);
}
#[test]
fn user_sign_up_with_too_short_username() {
let form = forms::UserSignUp {
username: "foo".to_string(),
password: "q1w2e3r4t5y6".to_string(),
};
assert_eq!(form.is_valid(), false);
}
#[test]
fn user_sign_up_with_empty_password() {
let form = forms::UserSignUp {
username: "kotovalexarian".to_string(),
password: "".to_string(),
};
assert_eq!(form.is_valid(), false);
}
#[test]
fn user_sign_up_with_blank_password() {
let form = forms::UserSignUp {
username: "kotovalexarian".to_string(),
password: " ".to_string(),
};
assert_eq!(form.is_valid(), false);
}
#[test]
fn user_sign_up_with_too_short_password() {
let form = forms::UserSignUp {
username: "kotovalexarian".to_string(),
password: "1234567".to_string(),
};
assert_eq!(form.is_valid(), false);
}
}