Automatically downcase UserId localparts.

This commit is contained in:
Jimmy Cuadra 2016-08-28 04:27:32 -07:00
parent 0caed9be18
commit 9da1442ffc

View File

@ -317,7 +317,7 @@ impl UserId {
/// ///
/// Fails if the given origin server name cannot be parsed as a valid host. /// Fails if the given origin server name cannot be parsed as a valid host.
pub fn new(server_name: &str) -> Result<Self, Error> { pub fn new(server_name: &str) -> Result<Self, Error> {
let user_id = format!("@{}:{}", generate_localpart(12), server_name); let user_id = format!("@{}:{}", generate_localpart(12).to_lowercase(), server_name);
let (localpart, host, port) = parse_id('@', &user_id)?; let (localpart, host, port) = parse_id('@', &user_id)?;
Ok(UserId { Ok(UserId {
@ -487,15 +487,16 @@ impl<'a> TryFrom<&'a str> for UserId {
/// server name. /// server name.
fn try_from(user_id: &'a str) -> Result<UserId, Error> { fn try_from(user_id: &'a str) -> Result<UserId, Error> {
let (localpart, host, port) = parse_id('@', user_id)?; let (localpart, host, port) = parse_id('@', user_id)?;
let downcased_localpart = localpart.to_lowercase();
if !USER_LOCALPART_PATTERN.is_match(localpart) { if !USER_LOCALPART_PATTERN.is_match(&downcased_localpart) {
return Err(Error::InvalidCharacters); return Err(Error::InvalidCharacters);
} }
Ok(UserId { Ok(UserId {
hostname: host, hostname: host,
port: port, port: port,
localpart: localpart.to_owned(), localpart: downcased_localpart.to_owned(),
}) })
} }
} }
@ -914,6 +915,16 @@ mod tests {
); );
} }
#[test]
fn downcase_user_id() {
assert_eq!(
UserId::try_from("@CARL:example.com")
.expect("Failed to create UserId.")
.to_string(),
"@carl:example.com"
);
}
#[test] #[test]
fn generate_random_valid_user_id() { fn generate_random_valid_user_id() {
let user_id = UserId::new("example.com") let user_id = UserId::new("example.com")
@ -972,7 +983,7 @@ mod tests {
#[test] #[test]
fn invalid_characters_in_user_id_localpart() { fn invalid_characters_in_user_id_localpart() {
assert_eq!( assert_eq!(
UserId::try_from("@CARL:example.com").err().unwrap(), UserId::try_from("@%%%:example.com").err().unwrap(),
Error::InvalidCharacters Error::InvalidCharacters
); );
} }