2023-03-22 23:37:13 +00:00
|
|
|
use regex::Regex;
|
|
|
|
|
|
|
|
use crate::errors::ValidationError;
|
|
|
|
|
2023-04-10 21:20:47 +00:00
|
|
|
use super::profiles::validate_username;
|
|
|
|
|
2023-03-22 23:37:13 +00:00
|
|
|
pub fn validate_local_username(username: &str) -> Result<(), ValidationError> {
|
2023-04-10 21:20:47 +00:00
|
|
|
validate_username(username)?;
|
2023-03-22 23:37:13 +00:00
|
|
|
// The username regexp should not allow domain names and IP addresses
|
2023-04-25 11:19:04 +00:00
|
|
|
let username_regexp = Regex::new(r"^[a-zA-Z0-9_]+$").unwrap();
|
2023-03-22 23:37:13 +00:00
|
|
|
if !username_regexp.is_match(username) {
|
2023-04-26 10:55:42 +00:00
|
|
|
return Err(ValidationError("invalid username".to_string()));
|
2023-03-22 23:37:13 +00:00
|
|
|
};
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_validate_local_username() {
|
|
|
|
let result_1 = validate_local_username("name_1");
|
2023-04-27 22:01:24 +00:00
|
|
|
assert!(result_1.is_ok());
|
2023-03-22 23:37:13 +00:00
|
|
|
let result_2 = validate_local_username("name&");
|
2023-04-27 22:15:44 +00:00
|
|
|
assert!(result_2.is_err());
|
2023-03-22 23:37:13 +00:00
|
|
|
}
|
|
|
|
}
|