vw_small

Hardened fork of Vaultwarden (https://github.com/dani-garcia/vaultwarden) with fewer features.
git clone https://git.philomathiclife.com/repos/vw_small
Log | Files | Refs | README

commit e8ef76b8f928c8898bcd84c819d616094f123f21
parent be1ddb4203d47331a141a8916c7067c8be7ebd3d
Author: janost <janost@users.noreply.github.com>
Date:   Sun, 29 Nov 2020 02:31:49 +0100

Read config vars from files

Diffstat:
Msrc/util.rs | 25+++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/util.rs b/src/util.rs @@ -283,20 +283,37 @@ where use std::env; +pub fn get_env_str_value(key: &str) -> Option<String> +{ + let key_file = format!("{}_FILE", key); + let value_from_env = env::var(key); + let value_file = env::var(&key_file); + + match (value_from_env, value_file) { + (Ok(_), Ok(_)) => panic!("You should not define both {} and {}!", key, key_file), + (Ok(v_env), Err(_)) => Some(v_env), + (Err(_), Ok(v_file)) => match fs::read_to_string(v_file) { + Ok(content) => Some(content.trim().to_string()), + Err(e) => panic!("Failed to load {}: {:?}", key, e) + }, + _ => None + } +} + pub fn get_env<V>(key: &str) -> Option<V> where V: FromStr, { - try_parse_string(env::var(key).ok()) + try_parse_string(get_env_str_value(key)) } const TRUE_VALUES: &[&str] = &["true", "t", "yes", "y", "1"]; const FALSE_VALUES: &[&str] = &["false", "f", "no", "n", "0"]; pub fn get_env_bool(key: &str) -> Option<bool> { - match env::var(key) { - Ok(val) if TRUE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(true), - Ok(val) if FALSE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(false), + match get_env_str_value(key) { + Some(val) if TRUE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(true), + Some(val) if FALSE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(false), _ => None, } }