diff --git a/src/configure/auto_mozilla.rs b/src/configure/auto_mozilla.rs index 0d48b7f3b..193fcb29f 100644 --- a/src/configure/auto_mozilla.rs +++ b/src/configure/auto_mozilla.rs @@ -26,10 +26,19 @@ pub enum Error { #[fail(display = "Bad or incomplete autoconfig")] IncompleteAutoconfig(LoginParam), + + #[fail(display = "Failed to get URL {}", _0)] + ReadUrlError(#[cause] super::read_url::Error), } pub type Result = std::result::Result; +impl From for Error { + fn from(err: super::read_url::Error) -> Error { + Error::ReadUrlError(err) + } +} + #[derive(Debug)] struct MozAutoconfigure<'a> { pub in_emailaddr: &'a str, @@ -118,16 +127,16 @@ pub fn moz_autoconfigure( context: &Context, url: &str, param_in: &LoginParam, -) -> Option { - let xml_raw = read_url(context, url).ok()?; +) -> Result { + let xml_raw = read_url(context, url)?; - match parse_xml(¶m_in.addr, &xml_raw) { - Err(err) => { - warn!(context, "{}", err); - None - } - Ok(lp) => Some(lp), - } + parse_xml(¶m_in.addr, &xml_raw).map_err(|err| { + warn!( + context, + "Failed to parse Thunderbird autoconfiguration XML: {}", err + ); + err.into() + }) } fn moz_autoconfigure_text_cb( diff --git a/src/configure/mod.rs b/src/configure/mod.rs index 5d1400c77..55a5ddf05 100644 --- a/src/configure/mod.rs +++ b/src/configure/mod.rs @@ -168,7 +168,7 @@ pub fn JobConfigureImap(context: &Context) { "https://autoconfig.{}/mail/config-v1.1.xml?emailaddress={}", param_domain, param_addr_urlencoded ); - param_autoconfig = moz_autoconfigure(context, &url, ¶m); + param_autoconfig = moz_autoconfigure(context, &url, ¶m).ok(); } true } @@ -180,7 +180,7 @@ pub fn JobConfigureImap(context: &Context) { "https://{}/.well-known/autoconfig/mail/config-v1.1.xml?emailaddress={}", param_domain, param_addr_urlencoded ); - param_autoconfig = moz_autoconfigure(context, &url, ¶m); + param_autoconfig = moz_autoconfigure(context, &url, ¶m).ok(); } true } @@ -216,7 +216,7 @@ pub fn JobConfigureImap(context: &Context) { "http://autoconfig.{}/mail/config-v1.1.xml?emailaddress={}", param_domain, param_addr_urlencoded ); - param_autoconfig = moz_autoconfigure(context, &url, ¶m); + param_autoconfig = moz_autoconfigure(context, &url, ¶m).ok(); } true } @@ -228,7 +228,7 @@ pub fn JobConfigureImap(context: &Context) { "http://{}/.well-known/autoconfig/mail/config-v1.1.xml", param_domain ); - param_autoconfig = moz_autoconfigure(context, &url, ¶m); + param_autoconfig = moz_autoconfigure(context, &url, ¶m).ok(); } true } @@ -238,7 +238,7 @@ pub fn JobConfigureImap(context: &Context) { if param_autoconfig.is_none() { /* always SSL for Thunderbird's database */ let url = format!("https://autoconfig.thunderbird.net/v1.1/{}", param_domain); - param_autoconfig = moz_autoconfigure(context, &url, ¶m); + param_autoconfig = moz_autoconfigure(context, &url, ¶m).ok(); } true }