1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
use std::io::prelude::*; use std::fs::File; use crate::{Result, GoErr}; use smpl_jwt::RSAKey; use std::str::FromStr; #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Credentials { #[serde(rename = "type")] t: String, project_id: String, private_key_id: String, private_key: String, client_email: String, client_id: String, auth_uri: String, token_uri: String, auth_provider_x509_cert_url: String, client_x509_cert_url: String } impl Credentials { pub fn from_file(fp: &str) -> Result<Self> { let mut f = File::open(fp)?; let mut buffer = Vec::new(); f.read_to_end(&mut buffer)?; Ok(serde_json::from_slice(buffer.as_slice())?) } pub fn rsa_key(&self) -> Result<RSAKey> { Ok(RSAKey::from_str(&self.private_key)?) } pub fn iss(&self) -> String { self.client_email.clone() } pub fn project(&self) -> String { self.project_id.clone() } pub fn token_uri(&self) -> String { self.token_uri.clone() } } impl FromStr for Credentials { type Err = GoErr; fn from_str(s: &str) -> Result<Self, GoErr> { Ok(serde_json::from_str(s)?) } }