Fix Autodiscover v2: Read email address from query parameters
This commit is contained in:
@@ -11,10 +11,15 @@ impl Server {
|
||||
pub async fn handle_autodiscover_v2_request(
|
||||
&self,
|
||||
query: Option<&str>,
|
||||
path_email: Option<&str>,
|
||||
) -> trc::Result<Result<Resource<Vec<u8>>, String>> {
|
||||
// Parse query parameters
|
||||
let params = UrlParams::new(query);
|
||||
let emailaddress = params.get("Email").unwrap_or_default().to_lowercase();
|
||||
let emailaddress = path_email
|
||||
.filter(|email| !email.is_empty())
|
||||
.or_else(|| params.get("Email"))
|
||||
.unwrap_or_default()
|
||||
.to_lowercase();
|
||||
let protocol = params.get("Protocol").unwrap_or_default();
|
||||
|
||||
// Validate email address
|
||||
|
||||
@@ -42,6 +42,7 @@ sha2 = "0.11"
|
||||
rkyv = { version = "0.8.10", features = ["little_endian"] }
|
||||
form-data = { version = "0.6.0", features = ["sync"], default-features = false }
|
||||
mime = "0.3.17"
|
||||
percent-encoding = "2.3.1"
|
||||
compact_str = "0.9.0"
|
||||
hashify = { version = "0.2" }
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ use hyper::{
|
||||
service::service_fn,
|
||||
};
|
||||
use hyper_util::rt::TokioIo;
|
||||
use percent_encoding::percent_decode_str;
|
||||
use jmap::{
|
||||
api::{
|
||||
ToJmapHttpResponse, event_source::EventSourceHandler, request::RequestHandler,
|
||||
@@ -471,8 +472,12 @@ impl ParseHttp for Server {
|
||||
self.is_http_anonymous_request_allowed(session.remote_ip)
|
||||
.await?;
|
||||
|
||||
let path_email = path.find(|segment| segment.contains('@')).map(|segment| {
|
||||
percent_decode_str(segment).decode_utf8_lossy().into_owned()
|
||||
});
|
||||
|
||||
return self
|
||||
.handle_autodiscover_v2_request(req.uri().query())
|
||||
.handle_autodiscover_v2_request(req.uri().query(), path_email.as_deref())
|
||||
.await
|
||||
.map(|result| match result {
|
||||
Ok(resource) => resource.into_http_response(),
|
||||
|
||||
Reference in New Issue
Block a user