Skip to main content

cdk_mintd/env_vars/
signatory.rs

1//! Remote signatory environment variables
2
3use std::env;
4
5use super::common::*;
6use crate::config::Signatory;
7
8impl Signatory {
9    pub fn from_env(mut self) -> Self {
10        if let Ok(enabled) = env::var(ENV_SIGNATORY_ENABLED) {
11            if let Ok(enabled) = enabled.parse() {
12                self.enabled = enabled;
13            }
14        }
15
16        if let Ok(addr) = env::var(ENV_SIGNATORY_ADDRESS) {
17            self.address = addr;
18        }
19
20        if let Ok(port) = env::var(ENV_SIGNATORY_PORT) {
21            if let Ok(port) = port.parse() {
22                self.port = port;
23            }
24        }
25
26        if let Ok(tls_dir) = env::var(ENV_SIGNATORY_TLS_DIR) {
27            self.tls_dir = Some(tls_dir.into());
28        }
29
30        if let Some(allow_insecure) = super::bool_override(ENV_SIGNATORY_ALLOW_INSECURE) {
31            self.allow_insecure = allow_insecure;
32        }
33
34        self
35    }
36}
37
38#[cfg(test)]
39mod tests {
40    use std::path::PathBuf;
41
42    use super::*;
43
44    fn env_lock() -> std::sync::MutexGuard<'static, ()> {
45        crate::test_utils::env_lock()
46    }
47
48    fn clear_env_vars() {
49        env::remove_var(ENV_SIGNATORY_ENABLED);
50        env::remove_var(ENV_SIGNATORY_ADDRESS);
51        env::remove_var(ENV_SIGNATORY_PORT);
52        env::remove_var(ENV_SIGNATORY_TLS_DIR);
53        env::remove_var(ENV_SIGNATORY_ALLOW_INSECURE);
54    }
55
56    #[test]
57    fn signatory_allow_insecure_override_fails_closed() {
58        let _guard = env_lock();
59        clear_env_vars();
60        let config = Signatory {
61            allow_insecure: true,
62            ..Default::default()
63        };
64        assert!(config.clone().from_env().allow_insecure);
65        for value in ["false", "not-a-boolean"] {
66            env::set_var(ENV_SIGNATORY_ALLOW_INSECURE, value);
67            assert!(!config.clone().from_env().allow_insecure);
68        }
69        #[cfg(unix)]
70        {
71            use std::os::unix::ffi::OsStringExt;
72            env::set_var(
73                ENV_SIGNATORY_ALLOW_INSECURE,
74                std::ffi::OsString::from_vec(vec![0xff]),
75            );
76            assert!(!config.from_env().allow_insecure);
77        }
78        clear_env_vars();
79    }
80
81    #[test]
82    fn signatory_from_env_reads_enabled_and_connection_fields() {
83        let _guard = env_lock();
84        clear_env_vars();
85
86        env::set_var(ENV_SIGNATORY_ENABLED, "true");
87        env::set_var(ENV_SIGNATORY_ADDRESS, "0.0.0.0");
88        env::set_var(ENV_SIGNATORY_PORT, "15061");
89        env::set_var(ENV_SIGNATORY_TLS_DIR, "/var/lib/cdk/signatory-tls");
90        env::set_var(ENV_SIGNATORY_ALLOW_INSECURE, "true");
91
92        let signatory = Signatory::default().from_env();
93
94        assert!(signatory.enabled);
95        assert_eq!(signatory.address, "0.0.0.0");
96        assert_eq!(signatory.port, 15061);
97        assert_eq!(
98            signatory.tls_dir,
99            Some(PathBuf::from("/var/lib/cdk/signatory-tls"))
100        );
101        assert!(signatory.allow_insecure);
102
103        clear_env_vars();
104    }
105}