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
#[derive(serde::Deserialize, Debug)]
pub struct ServiceAccount {
#[serde(rename = "type")]
pub r#type: String,
pub project_id: String,
pub private_key_id: String,
pub private_key: String,
pub client_email: String,
pub client_id: String,
pub auth_uri: String,
pub token_uri: String,
pub auth_provider_x509_cert_url: String,
pub client_x509_cert_url: String,
}
impl ServiceAccount {
pub(crate) fn get() -> Self {
dotenv::dotenv().ok();
let path = std::env::var("SERVICE_ACCOUNT")
.expect("SERVICE_ACCOUNT environment parameter required");
let file = std::fs::read_to_string(path).expect("SERVICE_ACCOUNT file not found");
let account: Self = serde_json::from_str(&file).expect("serivce account file not valid");
if account.r#type != "service_account" {
panic!("`type` paramter of `SERVICE_ACCOUNT` variable is not 'service_account'");
}
account
}
}