torrust_index_backend/utils/
validation.rs1use std::str::FromStr;
2
3use email_address::EmailAddress;
4use regex::Regex;
5
6const MIN_DOMAIN_LENGTH: usize = 4;
7
8#[must_use]
15pub fn validate_email_address(email_address_to_be_checked: &str) -> bool {
16 if !EmailAddress::is_valid(email_address_to_be_checked) {
17 return false;
18 }
19
20 let email = EmailAddress::from_str(email_address_to_be_checked).expect("Invalid email address");
21
22 domain_has_extension(email.domain())
24}
25
26fn domain_has_extension(domain: &str) -> bool {
30 if domain.len() < MIN_DOMAIN_LENGTH {
31 return false;
32 }
33
34 Regex::new(r".*\..*").expect("Invalid regex").is_match(domain)
35}
36
37#[cfg(test)]
38mod tests {
39
40 mod for_email_validation {
41 use crate::utils::validation::validate_email_address;
42
43 #[test]
44 fn it_should_accept_valid_email_addresses() {
45 assert!(validate_email_address("test@torrust.com"));
46 assert!(validate_email_address("t@torrust.org"));
47 }
48
49 #[test]
50 fn it_should_not_accept_invalid_email_addresses() {
51 assert!(!validate_email_address("test"));
52 assert!(!validate_email_address("test@"));
53 assert!(!validate_email_address("test@torrust."));
54 assert!(!validate_email_address("test@."));
55 assert!(!validate_email_address("test@.com"));
56
57 assert!(!validate_email_address("test@torrust"));
60 }
61 }
62
63 mod for_domain_validation {
64 use crate::utils::validation::domain_has_extension;
65
66 #[test]
67 fn it_should_accept_valid_domain_with_extension() {
68 assert!(domain_has_extension("a.io"));
69 assert!(domain_has_extension("a.com"));
70 }
71
72 #[test]
73 fn it_should_not_accept_dotless_domains() {
74 assert!(!domain_has_extension(""));
75 assert!(!domain_has_extension("."));
76 assert!(!domain_has_extension("a."));
77 }
78 }
79}