use crate::common::print_formatted_error::print_formatted_error;
use regex::Regex;
pub fn validate_secret_name(
new_value: &str,
default_value: &str,
already_used_values: &Vec<String>,
) -> Result<(), &'static str> {
let regex_result = Regex::new(r"^[\w -]+$");
let new_value_trimmed_value = new_value.to_lowercase().trim().to_string();
let default_value_trimmed_value = default_value.to_lowercase().trim().to_string();
let regex = match regex_result {
Ok(regex) => regex,
Err(_e) => {
print_formatted_error("Regular expression error checking the beginning of a name");
std::process::exit(1);
}
};
if new_value_trimmed_value.is_empty() {
return Err("The secret name must be at least 1 character long.");
}
if !regex.is_match(&new_value_trimmed_value) {
return Err("Only a-z, 0-9, ' ', '_', and '-' are allowed.");
}
if already_used_values.contains(&new_value_trimmed_value.to_string())
&& new_value_trimmed_value != default_value_trimmed_value
{
return Err("The secret name must be unique.");
}
Ok(())
}