SMTP configuration parsing and checking
This commit is contained in:
parent
d3b4b10d18
commit
f7ffb81d9e
55
src/main.rs
55
src/main.rs
|
@ -153,6 +153,56 @@ lazy_static! {
|
||||||
static ref CONFIG: Config = Config::load();
|
static ref CONFIG: Config = Config::load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct MailConfig {
|
||||||
|
reply_to_email: Option<String>,
|
||||||
|
smtp_host: String,
|
||||||
|
smtp_port: u16,
|
||||||
|
smtp_ssl: bool,
|
||||||
|
smtp_username: String,
|
||||||
|
smtp_password: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MailConfig {
|
||||||
|
fn load() -> Option<Self> {
|
||||||
|
let smtp_host = util::parse_option_string(env::var("SMTP_HOST").ok());
|
||||||
|
|
||||||
|
// When SMTP_HOST is absent, we assume the user does not want to enable it.
|
||||||
|
if smtp_host.is_none() {
|
||||||
|
return None
|
||||||
|
}
|
||||||
|
|
||||||
|
let smtp_ssl = util::parse_option_string(env::var("SMTP_SSL").ok()).unwrap_or(false);
|
||||||
|
let smtp_port = util::parse_option_string(env::var("SMTP_PORT").ok())
|
||||||
|
.unwrap_or_else(|| {
|
||||||
|
if smtp_ssl {
|
||||||
|
465u16
|
||||||
|
} else {
|
||||||
|
25u16
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Some(MailConfig {
|
||||||
|
reply_to_email: util::parse_option_string(env::var("REPLY_TO_EMAIL").ok()),
|
||||||
|
smtp_host: smtp_host.unwrap(),
|
||||||
|
smtp_port: smtp_port,
|
||||||
|
smtp_ssl: smtp_ssl,
|
||||||
|
// If username or password is not specified, and SMTP support seems to be wanted,
|
||||||
|
// don't let the app start: the configuration is clearly incomplete.
|
||||||
|
smtp_username: util::parse_option_string(env::var("SMTP_USERNAME").ok())
|
||||||
|
.unwrap_or_else(|| {
|
||||||
|
println!("Please specify SMTP_USERNAME to enable SMTP support.");
|
||||||
|
exit(1);
|
||||||
|
}),
|
||||||
|
smtp_password: util::parse_option_string(env::var("SMTP_PASSWORD").ok())
|
||||||
|
.unwrap_or_else(|| {
|
||||||
|
println!("Please specify SMTP_PASSWORD to enable SMTP support.");
|
||||||
|
exit(1);
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
database_url: String,
|
database_url: String,
|
||||||
|
@ -170,8 +220,11 @@ pub struct Config {
|
||||||
signups_allowed: bool,
|
signups_allowed: bool,
|
||||||
password_iterations: i32,
|
password_iterations: i32,
|
||||||
show_password_hint: bool,
|
show_password_hint: bool,
|
||||||
|
|
||||||
domain: String,
|
domain: String,
|
||||||
domain_set: bool,
|
domain_set: bool,
|
||||||
|
|
||||||
|
mail: Option<MailConfig>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
|
@ -202,6 +255,8 @@ impl Config {
|
||||||
|
|
||||||
domain_set: domain.is_ok(),
|
domain_set: domain.is_ok(),
|
||||||
domain: domain.unwrap_or("http://localhost".into()),
|
domain: domain.unwrap_or("http://localhost".into()),
|
||||||
|
|
||||||
|
mail: MailConfig::load(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue