Resultify moz_autoconfigure

This commit is contained in:
Alexander Krotov
2019-12-02 02:26:43 +01:00
parent 774106fc26
commit 2f47cf0be5
2 changed files with 23 additions and 14 deletions

View File

@@ -26,10 +26,19 @@ pub enum Error {
#[fail(display = "Bad or incomplete autoconfig")] #[fail(display = "Bad or incomplete autoconfig")]
IncompleteAutoconfig(LoginParam), IncompleteAutoconfig(LoginParam),
#[fail(display = "Failed to get URL {}", _0)]
ReadUrlError(#[cause] super::read_url::Error),
} }
pub type Result<T> = std::result::Result<T, Error>; pub type Result<T> = std::result::Result<T, Error>;
impl From<super::read_url::Error> for Error {
fn from(err: super::read_url::Error) -> Error {
Error::ReadUrlError(err)
}
}
#[derive(Debug)] #[derive(Debug)]
struct MozAutoconfigure<'a> { struct MozAutoconfigure<'a> {
pub in_emailaddr: &'a str, pub in_emailaddr: &'a str,
@@ -118,16 +127,16 @@ pub fn moz_autoconfigure(
context: &Context, context: &Context,
url: &str, url: &str,
param_in: &LoginParam, param_in: &LoginParam,
) -> Option<LoginParam> { ) -> Result<LoginParam> {
let xml_raw = read_url(context, url).ok()?; let xml_raw = read_url(context, url)?;
match parse_xml(&param_in.addr, &xml_raw) { parse_xml(&param_in.addr, &xml_raw).map_err(|err| {
Err(err) => { warn!(
warn!(context, "{}", err); context,
None "Failed to parse Thunderbird autoconfiguration XML: {}", err
} );
Ok(lp) => Some(lp), err.into()
} })
} }
fn moz_autoconfigure_text_cb<B: std::io::BufRead>( fn moz_autoconfigure_text_cb<B: std::io::BufRead>(

View File

@@ -168,7 +168,7 @@ pub fn JobConfigureImap(context: &Context) {
"https://autoconfig.{}/mail/config-v1.1.xml?emailaddress={}", "https://autoconfig.{}/mail/config-v1.1.xml?emailaddress={}",
param_domain, param_addr_urlencoded param_domain, param_addr_urlencoded
); );
param_autoconfig = moz_autoconfigure(context, &url, &param); param_autoconfig = moz_autoconfigure(context, &url, &param).ok();
} }
true true
} }
@@ -180,7 +180,7 @@ pub fn JobConfigureImap(context: &Context) {
"https://{}/.well-known/autoconfig/mail/config-v1.1.xml?emailaddress={}", "https://{}/.well-known/autoconfig/mail/config-v1.1.xml?emailaddress={}",
param_domain, param_addr_urlencoded param_domain, param_addr_urlencoded
); );
param_autoconfig = moz_autoconfigure(context, &url, &param); param_autoconfig = moz_autoconfigure(context, &url, &param).ok();
} }
true true
} }
@@ -216,7 +216,7 @@ pub fn JobConfigureImap(context: &Context) {
"http://autoconfig.{}/mail/config-v1.1.xml?emailaddress={}", "http://autoconfig.{}/mail/config-v1.1.xml?emailaddress={}",
param_domain, param_addr_urlencoded param_domain, param_addr_urlencoded
); );
param_autoconfig = moz_autoconfigure(context, &url, &param); param_autoconfig = moz_autoconfigure(context, &url, &param).ok();
} }
true true
} }
@@ -228,7 +228,7 @@ pub fn JobConfigureImap(context: &Context) {
"http://{}/.well-known/autoconfig/mail/config-v1.1.xml", "http://{}/.well-known/autoconfig/mail/config-v1.1.xml",
param_domain param_domain
); );
param_autoconfig = moz_autoconfigure(context, &url, &param); param_autoconfig = moz_autoconfigure(context, &url, &param).ok();
} }
true true
} }
@@ -238,7 +238,7 @@ pub fn JobConfigureImap(context: &Context) {
if param_autoconfig.is_none() { if param_autoconfig.is_none() {
/* always SSL for Thunderbird's database */ /* always SSL for Thunderbird's database */
let url = format!("https://autoconfig.thunderbird.net/v1.1/{}", param_domain); let url = format!("https://autoconfig.thunderbird.net/v1.1/{}", param_domain);
param_autoconfig = moz_autoconfigure(context, &url, &param); param_autoconfig = moz_autoconfigure(context, &url, &param).ok();
} }
true true
} }