cdk_mintd/env_vars/
signatory.rs1use 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}