34 lines
1.2 KiB
Rust
34 lines
1.2 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 }))
|
|
}
|
|
}
|