From 676f15f27cfd64d051fd2ae160fb6d8e3b1f2e7e Mon Sep 17 00:00:00 2001 From: bouzuya Date: Fri, 5 Apr 2024 07:25:07 +0900 Subject: [PATCH] v4-sign: Extract service_account_credentials mod --- v4-sign/src/lib.rs | 37 ++-------------------- v4-sign/src/service_account_credentials.rs | 35 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 34 deletions(-) create mode 100644 v4-sign/src/service_account_credentials.rs diff --git a/v4-sign/src/lib.rs b/v4-sign/src/lib.rs index d92e63d..5d7b586 100644 --- a/v4-sign/src/lib.rs +++ b/v4-sign/src/lib.rs @@ -9,6 +9,7 @@ pub mod policy_document; mod private; mod request_type; mod service; +mod service_account_credentials; mod signed_url; mod signing_algorithm; mod string_to_sign; @@ -28,6 +29,8 @@ use self::service::Service; use self::signed_url::{hex_encode, sign, SignedUrl}; use self::signing_algorithm::SigningAlgorithm; +pub use self::service_account_credentials::ServiceAccountCredentials; + #[derive(Debug, thiserror::Error)] #[error(transparent)] pub struct Error(#[from] ErrorKind); @@ -202,37 +205,3 @@ pub fn build_signed_url( .map_err(ErrorKind::SignedUrl)?; Ok(String::from(signed_url)) } - -pub struct ServiceAccountCredentials { - pub client_email: String, - pub private_key: String, -} - -impl ServiceAccountCredentials { - pub fn load>(path: P) -> Result { - let mut file = std::fs::File::open(path).map_err(ErrorKind::File)?; - let mut s = String::new(); - std::io::Read::read_to_string(&mut file, &mut s).map_err(ErrorKind::File)?; - let json_value: serde_json::Value = - serde_json::from_str(s.as_str()).map_err(ErrorKind::InvalidServiceAccountJson)?; - let json_object = json_value - .as_object() - .ok_or_else(|| ErrorKind::ServiceAccountJsonRootIsNotObject)?; - let client_email = json_object - .get("client_email") - .ok_or_else(|| ErrorKind::ServiceAccountJsonClientEmailIsNotFound)? - .as_str() - .ok_or_else(|| ErrorKind::ServiceAccountJsonClientEmailIsNotString)? - .to_string(); - let private_key = json_object - .get("private_key") - .ok_or_else(|| ErrorKind::ServiceAccountJsonPrivateKeyIsNotFound)? - .as_str() - .ok_or_else(|| ErrorKind::ServiceAccountJsonPrivateKeyIsNotString)? - .to_string(); - Ok(Self { - client_email, - private_key, - }) - } -} diff --git a/v4-sign/src/service_account_credentials.rs b/v4-sign/src/service_account_credentials.rs new file mode 100644 index 0000000..b8b4058 --- /dev/null +++ b/v4-sign/src/service_account_credentials.rs @@ -0,0 +1,35 @@ +use crate::{Error, ErrorKind}; + +pub struct ServiceAccountCredentials { + pub client_email: String, + pub private_key: String, +} + +impl ServiceAccountCredentials { + pub fn load>(path: P) -> Result { + let mut file = std::fs::File::open(path).map_err(ErrorKind::File)?; + let mut s = String::new(); + std::io::Read::read_to_string(&mut file, &mut s).map_err(ErrorKind::File)?; + let json_value: serde_json::Value = + serde_json::from_str(s.as_str()).map_err(ErrorKind::InvalidServiceAccountJson)?; + let json_object = json_value + .as_object() + .ok_or_else(|| ErrorKind::ServiceAccountJsonRootIsNotObject)?; + let client_email = json_object + .get("client_email") + .ok_or_else(|| ErrorKind::ServiceAccountJsonClientEmailIsNotFound)? + .as_str() + .ok_or_else(|| ErrorKind::ServiceAccountJsonClientEmailIsNotString)? + .to_string(); + let private_key = json_object + .get("private_key") + .ok_or_else(|| ErrorKind::ServiceAccountJsonPrivateKeyIsNotFound)? + .as_str() + .ok_or_else(|| ErrorKind::ServiceAccountJsonPrivateKeyIsNotString)? + .to_string(); + Ok(Self { + client_email, + private_key, + }) + } +}