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")]
IncompleteAutoconfig(LoginParam),
#[fail(display = "Failed to get URL {}", _0)]
ReadUrlError(#[cause] super::read_url::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)]
struct MozAutoconfigure<'a> {
pub in_emailaddr: &'a str,
@@ -118,16 +127,16 @@ pub fn moz_autoconfigure(
context: &Context,
url: &str,
param_in: &LoginParam,
) -> Option<LoginParam> {
let xml_raw = read_url(context, url).ok()?;
) -> Result<LoginParam> {
let xml_raw = read_url(context, url)?;
match parse_xml(&param_in.addr, &xml_raw) {
Err(err) => {
warn!(context, "{}", err);
None
}
Ok(lp) => Some(lp),
}
parse_xml(&param_in.addr, &xml_raw).map_err(|err| {
warn!(
context,
"Failed to parse Thunderbird autoconfiguration XML: {}", err
);
err.into()
})
}
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={}",
param_domain, param_addr_urlencoded
);
param_autoconfig = moz_autoconfigure(context, &url, &param);
param_autoconfig = moz_autoconfigure(context, &url, &param).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, &param);
param_autoconfig = moz_autoconfigure(context, &url, &param).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, &param);
param_autoconfig = moz_autoconfigure(context, &url, &param).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, &param);
param_autoconfig = moz_autoconfigure(context, &url, &param).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, &param);
param_autoconfig = moz_autoconfigure(context, &url, &param).ok();
}
true
}