summaryrefslogtreecommitdiff
path: root/crates/smtp
diff options
context:
space:
mode:
authormdecimus <mauro@stalw.art>2024-03-11 11:30:12 +0100
committermdecimus <mauro@stalw.art>2024-03-11 11:30:12 +0100
commit310ce493149a0e073cab667bea2b5bb230ff3b22 (patch)
treeaca91cbe1512e7b65c1d84f6575b203416442477 /crates/smtp
parent3081958765dd7b2a24066fe0f20d56c1797962ee (diff)
Updated settings REST API
Diffstat (limited to 'crates/smtp')
-rw-r--r--crates/smtp/src/core/management.rs43
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,