35 lines
1.1 KiB
Rust
35 lines
1.1 KiB
Rust
|
use std::sync::Arc;
|
||
|
|
||
|
use anyhow::{bail, Result};
|
||
|
use rusoto_signature::Region;
|
||
|
|
||
|
use crate::config::*;
|
||
|
use crate::login::{ldap_provider::*, static_provider::*, *};
|
||
|
|
||
|
pub struct Mailstore {
|
||
|
pub login_provider: Box<dyn LoginProvider + Send + Sync>,
|
||
|
}
|
||
|
impl Mailstore {
|
||
|
pub fn new(config: Config) -> Result<Arc<Self>> {
|
||
|
let s3_region = Region::Custom {
|
||
|
name: config.aws_region.clone(),
|
||
|
endpoint: config.s3_endpoint,
|
||
|
};
|
||
|
let k2v_region = Region::Custom {
|
||
|
name: config.aws_region,
|
||
|
endpoint: config.k2v_endpoint,
|
||
|
};
|
||
|
let login_provider: Box<dyn LoginProvider + Send + Sync> = match (config.login_static, config.login_ldap)
|
||
|
{
|
||
|
(Some(st), None) => Box::new(StaticLoginProvider::new(st, k2v_region, s3_region)?),
|
||
|
(None, Some(ld)) => Box::new(LdapLoginProvider::new(ld, k2v_region, s3_region)?),
|
||
|
(Some(_), Some(_)) => bail!("A single login provider must be set up in config file"),
|
||
|
(None, None) => bail!("No login provider is set up in config file"),
|
||
|
};
|
||
|
Ok(Arc::new(Self { login_provider }))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|