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.
63 lines
2.1 KiB
Rust
63 lines
2.1 KiB
Rust
/*
|
|
* 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))
|
|
}
|
|
}
|
|
}
|