mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 17:36:29 +03:00
configure: add expand_param_vector function
This commit is contained in:
committed by
link2xt
parent
a065f654e8
commit
cdba74a027
@@ -24,7 +24,7 @@ use crate::{chat, e2ee, provider};
|
|||||||
|
|
||||||
use auto_mozilla::moz_autoconfigure;
|
use auto_mozilla::moz_autoconfigure;
|
||||||
use auto_outlook::outlk_autodiscover;
|
use auto_outlook::outlk_autodiscover;
|
||||||
use server_params::ServerParams;
|
use server_params::{expand_param_vector, ServerParams};
|
||||||
|
|
||||||
macro_rules! progress {
|
macro_rules! progress {
|
||||||
($context:tt, $progress:expr) => {
|
($context:tt, $progress:expr) => {
|
||||||
@@ -194,8 +194,8 @@ async fn configure(ctx: &Context, param: &mut LoginParam) -> Result<()> {
|
|||||||
|
|
||||||
progress!(ctx, 500);
|
progress!(ctx, 500);
|
||||||
|
|
||||||
let servers: Vec<ServerParams> = param_autoconfig
|
let servers = expand_param_vector(
|
||||||
.unwrap_or_else(|| {
|
param_autoconfig.unwrap_or_else(|| {
|
||||||
vec![
|
vec![
|
||||||
ServerParams {
|
ServerParams {
|
||||||
protocol: Protocol::IMAP,
|
protocol: Protocol::IMAP,
|
||||||
@@ -212,16 +212,10 @@ async fn configure(ctx: &Context, param: &mut LoginParam) -> Result<()> {
|
|||||||
username: param.smtp.user.clone(),
|
username: param.smtp.user.clone(),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
})
|
}),
|
||||||
.into_iter()
|
¶m.addr,
|
||||||
// The order of expansion is important: ports are expanded the
|
¶m_domain,
|
||||||
// last, so they are changed the first. Username is only
|
);
|
||||||
// changed if default value (address with domain) didn't work
|
|
||||||
// for all available hosts and ports.
|
|
||||||
.flat_map(|params| params.expand_usernames(¶m.addr).into_iter())
|
|
||||||
.flat_map(|params| params.expand_hostnames(¶m_domain).into_iter())
|
|
||||||
.flat_map(|params| params.expand_ports().into_iter())
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
progress!(ctx, 600);
|
progress!(ctx, 600);
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use crate::provider::{Protocol, Socket};
|
|||||||
///
|
///
|
||||||
/// Can be loaded from offline provider database, online configuraiton
|
/// Can be loaded from offline provider database, online configuraiton
|
||||||
/// or derived from user entered parameters.
|
/// or derived from user entered parameters.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub(crate) struct ServerParams {
|
pub(crate) struct ServerParams {
|
||||||
/// Protocol, such as IMAP or SMTP.
|
/// Protocol, such as IMAP or SMTP.
|
||||||
pub protocol: Protocol,
|
pub protocol: Protocol,
|
||||||
@@ -113,3 +113,52 @@ impl ServerParams {
|
|||||||
res
|
res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Expands vector of `ServerParams`, replacing placeholders with
|
||||||
|
/// variants to try.
|
||||||
|
pub(crate) fn expand_param_vector(
|
||||||
|
v: Vec<ServerParams>,
|
||||||
|
addr: &str,
|
||||||
|
domain: &str,
|
||||||
|
) -> Vec<ServerParams> {
|
||||||
|
v.into_iter()
|
||||||
|
// The order of expansion is important: ports are expanded the
|
||||||
|
// last, so they are changed the first. Username is only
|
||||||
|
// changed if default value (address with domain) didn't work
|
||||||
|
// for all available hosts and ports.
|
||||||
|
.flat_map(|params| params.expand_usernames(addr).into_iter())
|
||||||
|
.flat_map(|params| params.expand_hostnames(domain).into_iter())
|
||||||
|
.flat_map(|params| params.expand_ports().into_iter())
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_expand_param_vector() {
|
||||||
|
let v = expand_param_vector(
|
||||||
|
vec![ServerParams {
|
||||||
|
protocol: Protocol::IMAP,
|
||||||
|
hostname: "example.net".to_string(),
|
||||||
|
port: 0,
|
||||||
|
socket: Socket::SSL,
|
||||||
|
username: "foobar".to_string(),
|
||||||
|
}],
|
||||||
|
"foobar@example.net",
|
||||||
|
"example.net",
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
v,
|
||||||
|
vec![ServerParams {
|
||||||
|
protocol: Protocol::IMAP,
|
||||||
|
hostname: "example.net".to_string(),
|
||||||
|
port: 993,
|
||||||
|
socket: Socket::SSL,
|
||||||
|
username: "foobar".to_string(),
|
||||||
|
}],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user