|
|
|
@ -331,9 +331,11 @@ pub struct Config {
|
|
|
|
|
|
|
|
|
|
mail: Option<MailConfig>,
|
|
|
|
|
templates: Handlebars,
|
|
|
|
|
templates_folder: String,
|
|
|
|
|
reload_templates: bool,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn load_templates(path: String) -> Handlebars {
|
|
|
|
|
fn load_templates(path: &str) -> Handlebars {
|
|
|
|
|
let mut hb = Handlebars::new();
|
|
|
|
|
// Error on missing params
|
|
|
|
|
hb.set_strict_mode(true);
|
|
|
|
@ -365,6 +367,21 @@ fn load_templates(path: String) -> Handlebars {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Config {
|
|
|
|
|
pub fn render_template<T: serde::ser::Serialize>(&self, name: &str, data: &T) -> Result<String, error::Error> {
|
|
|
|
|
// We add this to signal the compiler not to drop the result of 'load_templates'
|
|
|
|
|
let hb_owned;
|
|
|
|
|
|
|
|
|
|
let hb = if CONFIG.reload_templates {
|
|
|
|
|
warn!("RELOADING TEMPLATES");
|
|
|
|
|
hb_owned = load_templates(&self.templates_folder);
|
|
|
|
|
&hb_owned
|
|
|
|
|
} else {
|
|
|
|
|
&self.templates
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
hb.render(name, data).map_err(Into::into)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn load() -> Self {
|
|
|
|
|
use crate::util::{get_env, get_env_or};
|
|
|
|
|
dotenv::dotenv().ok();
|
|
|
|
@ -377,11 +394,15 @@ impl Config {
|
|
|
|
|
let yubico_client_id = get_env("YUBICO_CLIENT_ID");
|
|
|
|
|
let yubico_secret_key = get_env("YUBICO_SECRET_KEY");
|
|
|
|
|
|
|
|
|
|
let templates_folder = get_env_or("TEMPLATES_FOLDER", format!("{}/{}", &df, "templates"));
|
|
|
|
|
|
|
|
|
|
Config {
|
|
|
|
|
database_url: get_env_or("DATABASE_URL", format!("{}/{}", &df, "db.sqlite3")),
|
|
|
|
|
icon_cache_folder: get_env_or("ICON_CACHE_FOLDER", format!("{}/{}", &df, "icon_cache")),
|
|
|
|
|
attachments_folder: get_env_or("ATTACHMENTS_FOLDER", format!("{}/{}", &df, "attachments")),
|
|
|
|
|
templates: load_templates(get_env_or("TEMPLATES_FOLDER", format!("{}/{}", &df, "templates"))),
|
|
|
|
|
templates: load_templates(&templates_folder),
|
|
|
|
|
templates_folder,
|
|
|
|
|
reload_templates: get_env_or("RELOAD_TEMPLATES", false),
|
|
|
|
|
|
|
|
|
|
// icon_cache_ttl defaults to 30 days (30 * 24 * 60 * 60 seconds)
|
|
|
|
|
icon_cache_ttl: get_env_or("ICON_CACHE_TTL", 2_592_000),
|
|
|
|
|