2023-11-27 00:54:59 -08:00
|
|
|
use anyhow::Context;
|
2023-09-02 05:59:47 -07:00
|
|
|
use solana_sdk::signature::Keypair;
|
2023-09-02 09:47:29 -07:00
|
|
|
use std::env;
|
2023-09-02 05:59:47 -07:00
|
|
|
|
2023-11-27 00:54:59 -08:00
|
|
|
pub async fn load_identity_keypair(
|
2024-04-02 06:52:06 -07:00
|
|
|
identity_keyfile_path: Option<String>,
|
2023-11-27 00:54:59 -08:00
|
|
|
) -> anyhow::Result<Option<Keypair>> {
|
2024-04-02 06:52:06 -07:00
|
|
|
let identity_jsonarray_str = if let Ok(identity_env_var) = env::var("IDENTITY") {
|
|
|
|
identity_env_var
|
|
|
|
} else if let Some(identity_path) = identity_keyfile_path {
|
|
|
|
tokio::fs::read_to_string(identity_path)
|
2023-09-02 05:59:47 -07:00
|
|
|
.await
|
2023-11-27 00:54:59 -08:00
|
|
|
.context("Cannot find the identity file provided")?
|
|
|
|
} else {
|
|
|
|
return Ok(None);
|
|
|
|
};
|
|
|
|
|
2024-04-02 06:52:06 -07:00
|
|
|
let identity_bytes: Vec<u8> = serde_json::from_str(&identity_jsonarray_str)
|
|
|
|
.context("Invalid identity format expected Vec<u8>")?;
|
2023-11-27 00:54:59 -08:00
|
|
|
|
|
|
|
Ok(Some(
|
|
|
|
Keypair::from_bytes(identity_bytes.as_slice()).context("Invalid identity")?,
|
|
|
|
))
|
2023-09-02 05:59:47 -07:00
|
|
|
}
|