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.
|
/// 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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user