mirror of
https://github.com/LemmyNet/activitypub-federation-rust.git
synced 2025-01-08 14:05:23 +00:00
Support different alphabets in webfinger username (#78)
* Support different alphabets in webfinger username * clippy
This commit is contained in:
parent
ec12fb3830
commit
e86330852d
1 changed files with 30 additions and 7 deletions
|
@ -92,14 +92,10 @@ pub fn extract_webfinger_name<T>(query: &str, data: &Data<T>) -> Result<String,
|
||||||
where
|
where
|
||||||
T: Clone,
|
T: Clone,
|
||||||
{
|
{
|
||||||
|
// Regex to extract usernames from webfinger query. Supports different alphabets using `\p{L}`.
|
||||||
// TODO: would be nice if we could implement this without regex and remove the dependency
|
// TODO: would be nice if we could implement this without regex and remove the dependency
|
||||||
// Regex taken from Mastodon -
|
let regex =
|
||||||
// https://github.com/mastodon/mastodon/blob/2b113764117c9ab98875141bcf1758ba8be58173/app/models/account.rb#L65
|
Regex::new(&format!(r"^acct:([\p{{L}}0-9_]+)@{}$", data.domain())).map_err(Error::other)?;
|
||||||
let regex = Regex::new(&format!(
|
|
||||||
"^acct:((?i)[a-z0-9_]+([a-z0-9_\\.-]+[a-z0-9_]+)?)@{}$",
|
|
||||||
data.domain()
|
|
||||||
))
|
|
||||||
.map_err(Error::other)?;
|
|
||||||
Ok(regex
|
Ok(regex
|
||||||
.captures(query)
|
.captures(query)
|
||||||
.and_then(|c| c.get(1))
|
.and_then(|c| c.get(1))
|
||||||
|
@ -239,4 +235,31 @@ mod tests {
|
||||||
webfinger_resolve_actor::<DbConnection, DbUser>("graf@poa.st", &data).await?;
|
webfinger_resolve_actor::<DbConnection, DbUser>("graf@poa.st", &data).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_webfinger_extract_name() -> Result<(), Error> {
|
||||||
|
use crate::traits::tests::DbConnection;
|
||||||
|
let data = Data {
|
||||||
|
config: FederationConfig::builder()
|
||||||
|
.domain("example.com")
|
||||||
|
.app_data(DbConnection)
|
||||||
|
.build()
|
||||||
|
.await
|
||||||
|
.unwrap(),
|
||||||
|
request_counter: Default::default(),
|
||||||
|
};
|
||||||
|
assert_eq!(
|
||||||
|
Ok("test123".to_string()),
|
||||||
|
extract_webfinger_name("acct:test123@example.com", &data)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
Ok("Владимир".to_string()),
|
||||||
|
extract_webfinger_name("acct:Владимир@example.com", &data)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
Ok("تجريب".to_string()),
|
||||||
|
extract_webfinger_name("acct:تجريب@example.com", &data)
|
||||||
|
);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue