vls_proxy/util/
rpc_cookie.rs1use anyhow::Result;
2use std::path::PathBuf;
3
4pub fn get_rpc_credentials(
6 rpc_username: Option<String>,
7 rpc_password: Option<String>,
8 rpc_cookie: Option<PathBuf>,
9) -> Result<(String, String)> {
10 match (rpc_username, rpc_password, rpc_cookie) {
11 (Some(user), Some(password), None) => Ok((user, password)),
12 (_, _, Some(cookie)) => {
13 let contents = match std::fs::read_to_string(cookie) {
14 Ok(contents) => contents,
15 Err(e) => {
16 eprintln!("Error reading rpc cookie file: {}", e);
17 std::process::exit(1);
18 }
19 };
20 let mut split = contents.splitn(2, ":");
21 let user = split
22 .next()
23 .ok_or(anyhow::anyhow!("rpc_cookie file must contain a username and password"))?;
24 let password = split
25 .next()
26 .ok_or(anyhow::anyhow!("rpc_cookie file must contain a username and password"))?;
27
28 Ok((user.to_string(), password.to_string()))
29 }
30 _ => {
31 anyhow::bail!("rpc_username and rpc_password must be set, or rpc_cookie must be set");
32 }
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39 use std::io::Write;
40 use tempfile::NamedTempFile;
41
42 #[test]
43 fn test_rpc_username_password() {
44 let rpc_username = Some("user".to_string());
45 let rpc_password = Some("password".to_string());
46 let rpc_cookie = None;
47 assert_eq!(
48 get_rpc_credentials(rpc_username, rpc_password, rpc_cookie).unwrap(),
49 ("user".to_string(), "password".to_string())
50 );
51
52 let mut temp_file = NamedTempFile::new().unwrap();
53 write!(temp_file, "user:password").unwrap();
54 let rpc_cookie = Some(temp_file.path().to_path_buf());
55 let rpc_username = None;
56 let rpc_password = None;
57 assert_eq!(
58 get_rpc_credentials(rpc_username, rpc_password, rpc_cookie).unwrap(),
59 ("user".to_string(), "password".to_string())
60 );
61
62 let rpc_username = Some("user".to_string());
63 let rpc_password = None;
64 let rpc_cookie = None;
65 assert!(get_rpc_credentials(rpc_username, rpc_password, rpc_cookie).is_err());
66
67 let rpc_username = None;
68 let rpc_password = Some("password".to_string());
69 let rpc_cookie = None;
70 assert!(get_rpc_credentials(rpc_username, rpc_password, rpc_cookie).is_err());
71
72 let rpc_username = None;
73 let rpc_password = None;
74 let rpc_cookie = None;
75 assert!(get_rpc_credentials(rpc_username, rpc_password, rpc_cookie).is_err());
76 }
77}