Move read_autoconf_file to its own module

This commit is contained in:
Alexander Krotov
2019-12-02 02:10:46 +01:00
parent 1b0ff9f5be
commit 774106fc26
4 changed files with 40 additions and 26 deletions

View File

@@ -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<LoginParam> {
let xml_raw = read_autoconf_file(context, url)?;
let xml_raw = read_url(context, url).ok()?;
match parse_xml(&param_in.addr, &xml_raw) {
Err(err) => {

View File

@@ -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<T> = std::result::Result<T, Error>;
struct OutlookAutodiscover {
pub out: LoginParam,
pub out_imap_set: bool,
@@ -133,9 +135,9 @@ pub fn outlk_autodiscover(
_param_in: &LoginParam,
) -> Option<LoginParam> {
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);

View File

@@ -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<bool> {
* Configure a Context
******************************************************************************/
pub fn read_autoconf_file(context: &Context, url: &str) -> Option<String> {
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 {

27
src/configure/read_url.rs Normal file
View File

@@ -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<T> = std::result::Result<T, Error>;
pub fn read_url(context: &Context, url: &str) -> Result<String> {
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))
}
}
}