diff --git a/src/configure/auto_mozilla.rs b/src/configure/auto_mozilla.rs index ea52ae644..0d48b7f3b 100644 --- a/src/configure/auto_mozilla.rs +++ b/src/configure/auto_mozilla.rs @@ -10,7 +10,7 @@ use crate::constants::*; use crate::context::Context; use crate::login_param::LoginParam; -use super::read_autoconf_file; +use super::read_url::read_url; #[derive(Debug, Fail)] pub enum Error { @@ -119,7 +119,7 @@ pub fn moz_autoconfigure( url: &str, param_in: &LoginParam, ) -> Option { - let xml_raw = read_autoconf_file(context, url)?; + let xml_raw = read_url(context, url).ok()?; match parse_xml(¶m_in.addr, &xml_raw) { Err(err) => { diff --git a/src/configure/auto_outlook.rs b/src/configure/auto_outlook.rs index d3828cc7c..cdd162439 100644 --- a/src/configure/auto_outlook.rs +++ b/src/configure/auto_outlook.rs @@ -9,10 +9,10 @@ use crate::constants::*; use crate::context::Context; use crate::login_param::LoginParam; -use super::read_autoconf_file; +use super::read_url::read_url; #[derive(Debug, Fail)] -enum Error { +pub enum Error { #[fail(display = "XML error at position {}", position)] InvalidXml { position: usize, @@ -24,6 +24,8 @@ enum Error { IncompleteAutoconfig(LoginParam), } +pub type Result = std::result::Result; + struct OutlookAutodiscover { pub out: LoginParam, pub out_imap_set: bool, @@ -133,9 +135,9 @@ pub fn outlk_autodiscover( _param_in: &LoginParam, ) -> Option { let mut url = url.to_string(); - /* Follow up to 10 xml-redirects (http-redirects are followed in read_autoconf_file() */ + /* Follow up to 10 xml-redirects (http-redirects are followed in read_url() */ for _i in 0..10 { - if let Some(xml_raw) = read_autoconf_file(context, &url) { + if let Ok(xml_raw) = read_url(context, &url) { match parse_xml(&xml_raw) { Err(err) => { warn!(context, "{}", err); diff --git a/src/configure/mod.rs b/src/configure/mod.rs index 47e1c5dc2..5d1400c77 100644 --- a/src/configure/mod.rs +++ b/src/configure/mod.rs @@ -1,5 +1,9 @@ //! Email accounts autoconfiguration process module +mod auto_mozilla; +mod auto_outlook; +mod read_url; + use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC}; use crate::config::Config; @@ -12,10 +16,8 @@ use crate::login_param::LoginParam; use crate::oauth2::*; use crate::param::Params; -mod auto_outlook; -use auto_outlook::outlk_autodiscover; -mod auto_mozilla; use auto_mozilla::moz_autoconfigure; +use auto_outlook::outlk_autodiscover; macro_rules! progress { ($context:tt, $progress:expr) => { @@ -566,23 +568,6 @@ fn try_smtp_one_param(context: &Context, param: &LoginParam) -> Option { * Configure a Context ******************************************************************************/ -pub fn read_autoconf_file(context: &Context, url: &str) -> Option { - info!(context, "Testing {} ...", url); - - match reqwest::Client::new() - .get(url) - .send() - .and_then(|mut res| res.text()) - { - Ok(res) => Some(res), - Err(_err) => { - info!(context, "Can\'t read file.",); - - None - } - } -} - #[cfg(test)] mod tests { diff --git a/src/configure/read_url.rs b/src/configure/read_url.rs new file mode 100644 index 000000000..2d5a08557 --- /dev/null +++ b/src/configure/read_url.rs @@ -0,0 +1,27 @@ +use crate::context::Context; +use failure::Fail; + +#[derive(Debug, Fail)] +pub enum Error { + #[fail(display = "URL request error")] + GetError(#[cause] reqwest::Error), +} + +pub type Result = std::result::Result; + +pub fn read_url(context: &Context, url: &str) -> Result { + info!(context, "Requesting URL {}", url); + + match reqwest::Client::new() + .get(url) + .send() + .and_then(|mut res| res.text()) + { + Ok(res) => Ok(res), + Err(err) => { + info!(context, "Can\'t read URL {}", url); + + Err(Error::GetError(err)) + } + } +}