Files
inbuxa-server/crates/common/src/network/autoconfig/autodiscover_v2.rs
T
jcoffey-dev 7dae9b29fd 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.
2026-09-18 10:21:56 -07:00

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))
}
}
}