hashiverse_server_lib/server/
passphrase.rs1use std::fs;
16use secrecy::SecretString;
17
18pub fn get_passphrase(passphrase_path: Option<String>) -> anyhow::Result<SecretString> {
19 fn get_passphrase_from_file_if_exists(path: &str) -> Option<SecretString> {
20 let contents = fs::read_to_string(path);
21 match contents {
22 Ok(contents) => Some(SecretString::new(Box::from(contents))),
23 Err(_) => None
24 }
25 }
26
27 if let Some(passphrase_path) = passphrase_path {
29 let passphrase = get_passphrase_from_file_if_exists(&passphrase_path);
30 match passphrase {
31 Some(passphrase) => return Ok(passphrase),
32 None => anyhow::bail!("no passphrase found at {}", passphrase_path)
33 }
34 }
35
36 if let Some(passphrase) = get_passphrase_from_file_if_exists(" /run/secrets/hashiverse_passphrase") { return Ok(passphrase); }
38 if let Some(passphrase) = get_passphrase_from_file_if_exists(" /run/secrets/HASHIVERSE_PASSPHRASE") { return Ok(passphrase); }
39 if let Some(passphrase) = get_passphrase_from_file_if_exists(" /mnt/secrets/hashiverse_passphrase") { return Ok(passphrase); }
40 if let Some(passphrase) = get_passphrase_from_file_if_exists(" /mnt/secrets/HASHIVERSE_PASSPHRASE") { return Ok(passphrase); }
41 if let Some(passphrase) = get_passphrase_from_file_if_exists(" /etc/secrets/hashiverse_passphrase") { return Ok(passphrase); }
42 if let Some(passphrase) = get_passphrase_from_file_if_exists(" /etc/secrets/HASHIVERSE_PASSPHRASE") { return Ok(passphrase); }
43 if let Some(passphrase) = get_passphrase_from_file_if_exists(" ./.hashiverse_passphrase") { return Ok(passphrase); }
44 if let Some(passphrase) = get_passphrase_from_file_if_exists(" ./.HASHIVERSE_PASSPHRASE") { return Ok(passphrase); }
45
46 if let Ok(passphrase) = std::env::var("HASHIVERSE_PASSPHRASE") { return Ok(SecretString::new(Box::from(passphrase))); }
48
49 anyhow::bail!("no passphrase found - please (at worst) set the HASHIVERSE_PASSPHRASE environment variable to something memorable");
51}