Automatically downcase UserId localparts.
This commit is contained in:
parent
0caed9be18
commit
9da1442ffc
19
src/lib.rs
19
src/lib.rs
@ -317,7 +317,7 @@ impl UserId {
|
||||
///
|
||||
/// Fails if the given origin server name cannot be parsed as a valid host.
|
||||
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)?;
|
||||
|
||||
Ok(UserId {
|
||||
@ -487,15 +487,16 @@ impl<'a> TryFrom<&'a str> for UserId {
|
||||
/// server name.
|
||||
fn try_from(user_id: &'a str) -> Result<UserId, Error> {
|
||||
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);
|
||||
}
|
||||
|
||||
Ok(UserId {
|
||||
hostname: host,
|
||||
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]
|
||||
fn generate_random_valid_user_id() {
|
||||
let user_id = UserId::new("example.com")
|
||||
@ -972,7 +983,7 @@ mod tests {
|
||||
#[test]
|
||||
fn invalid_characters_in_user_id_localpart() {
|
||||
assert_eq!(
|
||||
UserId::try_from("@CARL:example.com").err().unwrap(),
|
||||
UserId::try_from("@%%%:example.com").err().unwrap(),
|
||||
Error::InvalidCharacters
|
||||
);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user