Dont crash when calling is_local_url() without domain (#108)

This commit is contained in:
Nutomic 2024-05-02 10:58:33 +02:00 committed by GitHub
parent ee268405f7
commit ddc455510b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

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;