use std::env;
use super::common::*;
use crate::config::Signatory;
impl Signatory {
pub fn from_env(mut self) -> Self {
if let Ok(enabled) = env::var(ENV_SIGNATORY_ENABLED) {
if let Ok(enabled) = enabled.parse() {
self.enabled = enabled;
}
}
if let Ok(addr) = env::var(ENV_SIGNATORY_ADDRESS) {
self.address = addr;
}
if let Ok(port) = env::var(ENV_SIGNATORY_PORT) {
if let Ok(port) = port.parse() {
self.port = port;
}
}
if let Ok(tls_dir) = env::var(ENV_SIGNATORY_TLS_DIR) {
self.tls_dir = Some(tls_dir.into());
}
if let Some(allow_insecure) = super::bool_override(ENV_SIGNATORY_ALLOW_INSECURE) {
self.allow_insecure = allow_insecure;
}
self
}
}
#[cfg(test)]
mod tests {
use std::path::PathBuf;
use super::*;
fn env_lock() -> std::sync::MutexGuard<'static, ()> {
crate::test_utils::env_lock()
}
fn clear_env_vars() {
env::remove_var(ENV_SIGNATORY_ENABLED);
env::remove_var(ENV_SIGNATORY_ADDRESS);
env::remove_var(ENV_SIGNATORY_PORT);
env::remove_var(ENV_SIGNATORY_TLS_DIR);
env::remove_var(ENV_SIGNATORY_ALLOW_INSECURE);
}
#[test]
fn signatory_allow_insecure_override_fails_closed() {
let _guard = env_lock();
clear_env_vars();
let config = Signatory {
allow_insecure: true,
..Default::default()
};
assert!(config.clone().from_env().allow_insecure);
for value in ["false", "not-a-boolean"] {
env::set_var(ENV_SIGNATORY_ALLOW_INSECURE, value);
assert!(!config.clone().from_env().allow_insecure);
}
#[cfg(unix)]
{
use std::os::unix::ffi::OsStringExt;
env::set_var(
ENV_SIGNATORY_ALLOW_INSECURE,
std::ffi::OsString::from_vec(vec![0xff]),
);
assert!(!config.from_env().allow_insecure);
}
clear_env_vars();
}
#[test]
fn signatory_from_env_reads_enabled_and_connection_fields() {
let _guard = env_lock();
clear_env_vars();
env::set_var(ENV_SIGNATORY_ENABLED, "true");
env::set_var(ENV_SIGNATORY_ADDRESS, "0.0.0.0");
env::set_var(ENV_SIGNATORY_PORT, "15061");
env::set_var(ENV_SIGNATORY_TLS_DIR, "/var/lib/cdk/signatory-tls");
env::set_var(ENV_SIGNATORY_ALLOW_INSECURE, "true");
let signatory = Signatory::default().from_env();
assert!(signatory.enabled);
assert_eq!(signatory.address, "0.0.0.0");
assert_eq!(signatory.port, 15061);
assert_eq!(
signatory.tls_dir,
Some(PathBuf::from("/var/lib/cdk/signatory-tls"))
);
assert!(signatory.allow_insecure);
clear_env_vars();
}
}