in proxy_agent/src/key_keeper.rs [656:697]
fn fetch_local_key(key_dir: &Path, key_guid: &str, encrypted: bool) -> Result<Key> {
let mut key_file = key_dir.join(key_guid);
if encrypted {
key_file.set_extension("encrypted");
} else {
key_file.set_extension("key");
}
if !key_file.exists() {
// guid.key file does not exist locally
return Err(Error::Key(
crate::common::error::KeyErrorType::FetchLocalKey(format!(
"Key file '{}' does not exist locally.",
key_file.display()
)),
));
}
let key_data = if encrypted {
#[cfg(not(windows))]
{
// return NotSupported error for non-windows platform
return Err(Error::Key(KeyErrorType::FetchLocalKey(
"Not supported to fetch encrypted key on non-windows platform.".to_string(),
)));
}
#[cfg(windows)]
{
crate::common::fetch_key_data(&key_file)?
}
} else {
fs::read_to_string(&key_file).map_err(|e| {
Error::Io(format!("read key file '{}' failed", key_file.display()), e)
})?
};
serde_json::from_str::<Key>(&key_data).map_err(|e| {
Error::Key(crate::common::error::KeyErrorType::FetchLocalKey(format!(
"Parse key data with error: {}",
e
)))
})
}