ConfigClient: return key path, not content

This commit is contained in:
ChristianVisintin
2020-12-24 16:42:42 +01:00
parent f0144e3bc2
commit fbb60c7cbc

View File

@@ -31,13 +31,13 @@ use crate::config::{SerializerError, SerializerErrorKind, UserConfig};
use crate::filetransfer::FileTransferProtocol; use crate::filetransfer::FileTransferProtocol;
// Ext // Ext
use std::fs::{create_dir, remove_file, File, OpenOptions}; use std::fs::{create_dir, remove_file, File, OpenOptions};
use std::io::{Read, Write}; use std::io::Write;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::str::FromStr; use std::str::FromStr;
use std::string::ToString; use std::string::ToString;
// Types // Types
pub type SshHost = (String, String, String); // 0: host, 1: username, 2: RSA key pub type SshHost = (String, String, PathBuf); // 0: host, 1: username, 2: RSA key path
/// ## ConfigClient /// ## ConfigClient
/// ///
@@ -191,15 +191,10 @@ impl ConfigClient {
match self.config.remote.ssh_keys.get(mkey) { match self.config.remote.ssh_keys.get(mkey) {
None => Ok(None), None => Ok(None),
Some(key_path) => { Some(key_path) => {
// Read key path
let mut key_file: File = File::open(key_path)?;
// Read
let mut key: String = String::new();
key_file.read_to_string(&mut key)?;
// Get host and username // Get host and username
let (host, username): (String, String) = Self::get_ssh_tokens(mkey); let (host, username): (String, String) = Self::get_ssh_tokens(mkey);
// Return key // Return key
Ok(Some((host, username, key))) Ok(Some((host, username, PathBuf::from(key_path))))
} }
} }
} }
@@ -299,6 +294,8 @@ mod tests {
use crate::config::UserConfig; use crate::config::UserConfig;
use crate::utils::random::random_alphanumeric_with_len; use crate::utils::random::random_alphanumeric_with_len;
use std::io::Read;
#[test] #[test]
fn test_system_config_new() { fn test_system_config_new() {
let tmp_dir: tempfile::TempDir = create_tmp_dir(); let tmp_dir: tempfile::TempDir = create_tmp_dir();
@@ -353,12 +350,14 @@ mod tests {
// Verify client has updated parameters // Verify client has updated parameters
assert_eq!(client.get_default_protcol(), FileTransferProtocol::Scp); assert_eq!(client.get_default_protcol(), FileTransferProtocol::Scp);
assert_eq!(client.get_text_editor(), PathBuf::from("/usr/bin/vim")); assert_eq!(client.get_text_editor(), PathBuf::from("/usr/bin/vim"));
let mut expected_key_path: PathBuf = key_path.clone();
expected_key_path.push("pi@192.168.1.31.key");
assert_eq!( assert_eq!(
client.get_ssh_key("pi@192.168.1.31").unwrap().unwrap(), client.get_ssh_key("pi@192.168.1.31").unwrap().unwrap(),
( (
String::from("192.168.1.31"), String::from("192.168.1.31"),
String::from("pi"), String::from("pi"),
String::from("piroporopero") expected_key_path,
) )
); );
} }
@@ -406,7 +405,16 @@ mod tests {
println!("{:?}", host); println!("{:?}", host);
assert_eq!(host.0, String::from("192.168.1.31")); assert_eq!(host.0, String::from("192.168.1.31"));
assert_eq!(host.1, String::from("pi")); assert_eq!(host.1, String::from("pi"));
assert_eq!(host.2, rsa_key); let mut expected_key_path: PathBuf = key_path.clone();
expected_key_path.push("pi@192.168.1.31.key");
assert_eq!(host.2, expected_key_path);
// Read rsa key
let mut key_file: File = File::open(expected_key_path.as_path()).ok().unwrap();
// Read
let mut key: String = String::new();
assert!(key_file.read_to_string(&mut key).is_ok());
// Verify rsa key
assert_eq!(key, rsa_key);
} }
// Unexisting key // Unexisting key
assert!(client.get_ssh_key("test").ok().unwrap().is_none()); assert!(client.get_ssh_key("test").ok().unwrap().is_none());