From 7ca2a8eb6f72894d18a150d9c3cd269c747cb3fd Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Thu, 3 Apr 2025 11:44:53 +0200 Subject: [PATCH] Use `url::Url::parse` to check the url --- crates/meilisearch/src/routes/network.rs | 26 ++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/crates/meilisearch/src/routes/network.rs b/crates/meilisearch/src/routes/network.rs index 95033312a..7e58df113 100644 --- a/crates/meilisearch/src/routes/network.rs +++ b/crates/meilisearch/src/routes/network.rs @@ -119,10 +119,22 @@ pub struct Network { impl Remote { pub fn try_into_db_node(self, name: &str) -> Result { Ok(DbRemote { - url: self.url.set().ok_or(ResponseError::from_msg( - format!("Missing field `.remotes.{name}.url`"), - meilisearch_types::error::Code::MissingNetworkUrl, - ))?, + url: self + .url + .set() + .ok_or(ResponseError::from_msg( + format!("Missing field `.remotes.{name}.url`"), + meilisearch_types::error::Code::MissingNetworkUrl, + )) + .and_then(|url| { + if let Err(error) = url::Url::parse(&url) { + return Err(ResponseError::from_msg( + format!("Invalid `.remotes.{name}.url` (`{url}`): {error}"), + meilisearch_types::error::Code::InvalidNetworkUrl, + )); + } + Ok(url) + })?, search_api_key: self.search_api_key.set(), }) } @@ -212,11 +224,9 @@ async fn patch_network( let merged = DbRemote { url: match new_url { Setting::Set(new_url) => { - if !new_url.starts_with("http://") - && !new_url.starts_with("https://") - { + if let Err(error) = url::Url::parse(&new_url) { return Err(ResponseError::from_msg( - format!("in .remotes.{key}.url: error from Url::parse"), + format!("Invalid `.remotes.{key}.url` (`{new_url}`): {error}"), meilisearch_types::error::Code::InvalidNetworkUrl, )); }