Import upstream v0.16.22, stripped
Upstream commit: 474dd0229cb20cf513036619781ed97bd8073c3f Enterprise-only files removed or emptied: 63 Enterprise-only snippets removed: 117 in 50 files Dangling module declarations removed: 5 Cargo edits turning enterprise off: 14 Verification: clean Enterprise feature gates left for rebuilt features: 19 in 18 files Produced by tools/fork/strip.py. The full report is in docs/fork/strip-reports/ on main.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <[email protected]>
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
||||
*/
|
||||
|
||||
use crate::{Server, manager::application::Resource};
|
||||
use utils::url_params::UrlParams;
|
||||
|
||||
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 = 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
|
||||
let Some((_, domain)) = emailaddress.rsplit_once('@') else {
|
||||
return Err(trc::ResourceEvent::BadParameters
|
||||
.into_err()
|
||||
.details("Missing domain in email address"));
|
||||
};
|
||||
|
||||
if domain.is_empty() {
|
||||
return Err(trc::ResourceEvent::BadParameters
|
||||
.into_err()
|
||||
.details("Missing domain in email address"));
|
||||
}
|
||||
|
||||
if protocol.eq_ignore_ascii_case("autodiscoverv1") {
|
||||
let server_name = &self.core.network.server_name;
|
||||
let body = format!(
|
||||
"{{\"Protocol\":\"AutodiscoverV1\",\
|
||||
\"Url\":\"https://{server_name}/autodiscover/autodiscover.xml\"}}"
|
||||
);
|
||||
Ok(Ok(Resource::new(
|
||||
"application/json; charset=utf-8",
|
||||
body.into_bytes(),
|
||||
)))
|
||||
} else {
|
||||
let safe_protocol: String = protocol
|
||||
.chars()
|
||||
.filter(|c| c.is_ascii_alphanumeric())
|
||||
.collect();
|
||||
let err = format!(
|
||||
"{{\"ErrorCode\":\"InvalidProtocol\",\
|
||||
\"ErrorMessage\":\"The given protocol value \
|
||||
'{safe_protocol}' is invalid. \
|
||||
Supported values are 'AutodiscoverV1'\"}}"
|
||||
);
|
||||
Ok(Err(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user