Autoconfig: return %EMAILADDRESS% if no e-mail address is provided (#1537)

This commit is contained in:
mdecimus
2025-05-23 16:41:21 +02:00
parent 791b1e63e8
commit 2eb99ed3bd

View File

@@ -27,8 +27,9 @@ pub trait Autoconfig: Sync + Send {
body: Option<Vec<u8>>, body: Option<Vec<u8>>,
) -> impl Future<Output = trc::Result<HttpResponse>> + Send; ) -> impl Future<Output = trc::Result<HttpResponse>> + Send;
fn autoconfig_parameters<'x>( fn autoconfig_parameters<'x>(
&self, &'x self,
emailaddress: &'x str, emailaddress: &'x str,
fail_if_invalid: bool,
) -> impl Future<Output = trc::Result<(String, String, &'x str)>> + Send; ) -> impl Future<Output = trc::Result<(String, String, &'x str)>> + Send;
} }
@@ -40,7 +41,8 @@ impl Autoconfig for Server {
.get("emailaddress") .get("emailaddress")
.unwrap_or_default() .unwrap_or_default()
.to_lowercase(); .to_lowercase();
let (account_name, server_name, domain) = self.autoconfig_parameters(&emailaddress).await?; let (account_name, server_name, domain) =
self.autoconfig_parameters(&emailaddress, false).await?;
let services = self.core.storage.config.get_services().await?; let services = self.core.storage.config.get_services().await?;
// Build XML response // Build XML response
@@ -101,7 +103,8 @@ impl Autoconfig for Server {
.details("Failed to parse autodiscover request") .details("Failed to parse autodiscover request")
.ctx(trc::Key::Reason, err) .ctx(trc::Key::Reason, err)
})?; })?;
let (account_name, server_name, _) = self.autoconfig_parameters(&emailaddress).await?; let (account_name, server_name, _) =
self.autoconfig_parameters(&emailaddress, true).await?;
let services = self.core.storage.config.get_services().await?; let services = self.core.storage.config.get_services().await?;
// Build XML response // Build XML response
@@ -175,17 +178,24 @@ impl Autoconfig for Server {
} }
async fn autoconfig_parameters<'x>( async fn autoconfig_parameters<'x>(
&self, &'x self,
emailaddress: &'x str, emailaddress: &'x str,
fail_if_invalid: bool,
) -> trc::Result<(String, String, &'x str)> { ) -> trc::Result<(String, String, &'x str)> {
let (_, domain) = emailaddress.rsplit_once('@').ok_or_else(|| { // Return EMAILADDRESS
trc::ResourceEvent::BadParameters let Some((_, domain)) = emailaddress.rsplit_once('@') else {
.into_err() return if !fail_if_invalid {
.details("Missing domain in email address") Ok((
})?; "%EMAILADDRESS%".to_string(),
self.core.network.server_name.clone(),
// Obtain server name &self.core.network.report_domain,
let server_name = self.core.network.server_name.clone(); ))
} else {
Err(trc::ResourceEvent::BadParameters
.into_err()
.details("Missing domain in email address"))
};
};
// Find the account name by e-mail address // Find the account name by e-mail address
let mut account_name = emailaddress.into(); let mut account_name = emailaddress.into();
@@ -214,7 +224,7 @@ impl Autoconfig for Server {
} }
} }
Ok((account_name, server_name, domain)) Ok((account_name, self.core.network.server_name.clone(), domain))
} }
} }