Dont crash when calling is_local_url() without domain

This commit is contained in:
Felix Ableitner 2024-04-30 00:10:26 +02:00
parent ee268405f7
commit e78e014c6c

View file

@ -174,11 +174,17 @@ impl<T: Clone> FederationConfig<T> {
/// Returns true if the url refers to this instance. Handles hostnames like `localhost:8540` for /// Returns true if the url refers to this instance. Handles hostnames like `localhost:8540` for
/// local debugging. /// local debugging.
pub(crate) fn is_local_url(&self, url: &Url) -> bool { pub(crate) fn is_local_url(&self, url: &Url) -> bool {
let mut domain = url.host_str().expect("id has domain").to_string(); match url.host_str() {
if let Some(port) = url.port() { Some(domain) => {
domain = format!("{}:{}", domain, port); let domain = if let Some(port) = url.port() {
format!("{}:{}", domain, port)
} else {
domain.to_string()
};
domain == self.domain
}
None => false,
} }
domain == self.domain
} }
/// Returns the local domain /// Returns the local domain
@ -355,13 +361,17 @@ mod test {
.await .await
.unwrap() .unwrap()
} }
#[tokio::test] #[tokio::test]
async fn test_url_is_local() -> Result<(), Error> { async fn test_url_is_local() -> Result<(), Error> {
let config = config().await; let config = config().await;
assert!(config.is_local_url(&Url::parse("http://example.com")?)); assert!(config.is_local_url(&Url::parse("http://example.com")?));
assert!(!config.is_local_url(&Url::parse("http://other.com")?)); assert!(!config.is_local_url(&Url::parse("http://other.com")?));
// ensure that missing domain doesnt cause crash
assert!(!config.is_local_url(&Url::parse("http://127.0.0.1")?));
Ok(()) Ok(())
} }
#[tokio::test] #[tokio::test]
async fn test_get_domain() { async fn test_get_domain() {
let config = config().await; let config = config().await;