diff options
author | mdecimus <mauro@stalw.art> | 2024-03-11 11:30:12 +0100 |
---|---|---|
committer | mdecimus <mauro@stalw.art> | 2024-03-11 11:30:12 +0100 |
commit | 310ce493149a0e073cab667bea2b5bb230ff3b22 (patch) | |
tree | aca91cbe1512e7b65c1d84f6575b203416442477 /crates/smtp | |
parent | 3081958765dd7b2a24066fe0f20d56c1797962ee (diff) |
Updated settings REST API
Diffstat (limited to 'crates/smtp')
-rw-r--r-- | crates/smtp/src/core/management.rs | 43 |
1 files changed, 6 insertions, 37 deletions
diff --git a/crates/smtp/src/core/management.rs b/crates/smtp/src/core/management.rs index cc62ac88..6eac089b 100644 --- a/crates/smtp/src/core/management.rs +++ b/crates/smtp/src/core/management.rs @@ -21,7 +21,7 @@ * for more details. */ -use std::{borrow::Cow, collections::HashMap, net::IpAddr, str::FromStr, sync::Arc}; +use std::{net::IpAddr, str::FromStr, sync::Arc}; use directory::{AuthResult, Type}; use http_body_util::{combinators::BoxBody, BodyExt, Empty, Full}; @@ -54,7 +54,10 @@ use store::{ Deserialize, IterateParams, ValueKey, U64_LEN, }; -use utils::listener::{limiter::InFlight, SessionData, SessionManager, SessionStream}; +use utils::{ + listener::{limiter::InFlight, SessionData, SessionManager, SessionStream}, + url_params::UrlParams, +}; use crate::{ queue::{self, ErrorDetails, HostResponse, QueueId, Status}, @@ -345,7 +348,7 @@ impl SMTP { path_2: &str, path_3: Option<&str>, ) -> hyper::Response<BoxBody<Bytes, hyper::Error>> { - let params = UrlParams::new(uri); + let params = UrlParams::new(uri.query()); let (status, response) = match (method, path_1, path_2, path_3) { (&Method::GET, "queue", "messages", None) => { @@ -927,40 +930,6 @@ fn not_found() -> (StatusCode, String) { ) } -#[derive(Default)] -struct UrlParams<'x> { - params: HashMap<Cow<'x, str>, Cow<'x, str>>, -} - -impl<'x> UrlParams<'x> { - pub fn new(uri: &'x Uri) -> Self { - if let Some(query) = uri.query() { - Self { - params: form_urlencoded::parse(query.as_bytes()) - .filter(|(_, value)| !value.is_empty()) - .collect(), - } - } else { - Self::default() - } - } - - pub fn get(&self, key: &str) -> Option<&str> { - self.params.get(key).map(|v| v.as_ref()) - } - - pub fn has_key(&self, key: &str) -> bool { - self.params.contains_key(key) - } - - pub fn parse<T>(&self, key: &str) -> Option<T> - where - T: std::str::FromStr, - { - self.get(key).and_then(|v| v.parse().ok()) - } -} - enum ReportType { Dmarc, Tls, |