From fcaa844ad0b31909134756411f490b5a72e48a84 Mon Sep 17 00:00:00 2001 From: Antony1060 Date: Mon, 22 Jan 2024 16:59:54 +0100 Subject: [PATCH] Non-strict querystring parsing --- server/src/routes/mod.rs | 9 ++++++++- worker/src/http_util.rs | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs index 395f30e..7bf46a1 100644 --- a/server/src/routes/mod.rs +++ b/server/src/routes/mod.rs @@ -5,6 +5,7 @@ use axum::Json; use enstate_shared::core::error::ProfileError; use enstate_shared::utils::vec::dedup_ord; use ethers::prelude::ProviderError; +use lazy_static::lazy_static; use serde::{Deserialize, Deserializer}; use thiserror::Error; @@ -116,6 +117,10 @@ pub fn validate_bulk_input( pub struct Qs(T); +lazy_static! { + static ref SERDE_QS_CONFIG: serde_qs::Config = serde_qs::Config::new(2, false); +} + #[axum::async_trait] impl FromRequestParts for Qs where @@ -126,7 +131,9 @@ where async fn from_request_parts(parts: &mut Parts, _: &S) -> Result { let query = parts.uri.query().unwrap_or(""); Ok(Self( - serde_qs::from_str(query).map_err(|error| error.to_string())?, + SERDE_QS_CONFIG + .deserialize_str(query) + .map_err(|error| error.to_string())?, )) } } diff --git a/worker/src/http_util.rs b/worker/src/http_util.rs index 376a286..0712233 100644 --- a/worker/src/http_util.rs +++ b/worker/src/http_util.rs @@ -1,6 +1,7 @@ use enstate_shared::core::error::ProfileError; use ethers::prelude::ProviderError; use http::status::StatusCode; +use lazy_static::lazy_static; use serde::de::DeserializeOwned; use serde::{Deserialize, Deserializer, Serialize}; use thiserror::Error; @@ -23,11 +24,15 @@ where Ok(value.map(|it| it == "true").unwrap_or(false)) } +lazy_static! { + static ref SERDE_QS_CONFIG: serde_qs::Config = serde_qs::Config::new(2, false); +} + pub fn parse_query(req: &Request) -> worker::Result { let url = req.url()?; let query = url.query().unwrap_or(""); - serde_qs::from_str::(query).map_err(|_| http_simple_status_error(StatusCode::BAD_REQUEST)) + SERDE_QS_CONFIG.deserialize_str::(query).map_err(|_| http_simple_status_error(StatusCode::BAD_REQUEST)) } #[derive(Error, Debug)]