fn fetch_local_key()

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
            )))
        })
    }