✨ feat(config): introduce client configuration
- adds `ClientConfig` struct for managing Gmail client settings - supports loading credentials from environment variables or a JSON file - provides methods to access the application secret and configuration root
This commit is contained in:
committed by
Jeremiah Russell
parent
72d220e2f1
commit
dd1fe356a2
67
src/client_config.rs
Normal file
67
src/client_config.rs
Normal file
@@ -0,0 +1,67 @@
|
||||
use std::{fs, path::PathBuf};
|
||||
|
||||
use config::Config;
|
||||
use google_gmail1::yup_oauth2::{ApplicationSecret, ConsoleApplicationSecret};
|
||||
|
||||
use crate::Result;
|
||||
|
||||
mod config_root;
|
||||
|
||||
use config_root::ConfigRoot;
|
||||
|
||||
/// Configuration for the gmail client
|
||||
#[derive(Debug)]
|
||||
pub struct ClientConfig {
|
||||
secret: ApplicationSecret,
|
||||
config_root: ConfigRoot,
|
||||
}
|
||||
|
||||
impl ClientConfig {
|
||||
/// Create new configuration from configuration
|
||||
pub fn new_from_configuration(configs: Config) -> Result<Self> {
|
||||
let root = configs.get_string("config_root")?;
|
||||
let config_root = ConfigRoot::parse(&root);
|
||||
|
||||
let secret = if let Ok(client_id) = configs.get_string("client_id")
|
||||
&& let Ok(client_secret) = configs.get_string("client_secret")
|
||||
&& let Ok(token_uri) = configs.get_string("token_uri")
|
||||
&& let Ok(auth_uri) = configs.get_string("auth_uri")
|
||||
{
|
||||
ApplicationSecret {
|
||||
client_id,
|
||||
client_secret,
|
||||
token_uri,
|
||||
auth_uri,
|
||||
project_id: None,
|
||||
redirect_uris: Vec::new(),
|
||||
client_email: None,
|
||||
auth_provider_x509_cert_url: None,
|
||||
client_x509_cert_url: None,
|
||||
}
|
||||
} else {
|
||||
let credential_file = configs.get_string("credential_file")?;
|
||||
let path = PathBuf::from(root).join(credential_file);
|
||||
let json_str = fs::read_to_string(path).expect("could not read path");
|
||||
|
||||
let console: ConsoleApplicationSecret =
|
||||
serde_json::from_str(&json_str).expect("could not convert to struct");
|
||||
|
||||
console.installed.unwrap()
|
||||
};
|
||||
|
||||
Ok(ClientConfig {
|
||||
config_root,
|
||||
secret,
|
||||
})
|
||||
}
|
||||
|
||||
/// Report a reference to the secret.
|
||||
pub fn secret(&self) -> &ApplicationSecret {
|
||||
&self.secret
|
||||
}
|
||||
|
||||
/// Report a reference to the config root.
|
||||
pub fn config_root(&self) -> &ConfigRoot {
|
||||
&self.config_root
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user