diff --git a/src/config.rs b/src/config.rs index 1159f0c..1230d8b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,5 @@ use std::env; +use std::ops::Deref; use config::File; use serde::Deserialize; @@ -22,7 +23,7 @@ impl Configuration { // this case is currently untested "windows" => { location.push(String::from("config.json")); - location.push(String::from("{:?}/AppData/Roaming/gt/config.json")) + location.push(format!("{:?}/AppData/Roaming/gt/config.json", home_dir_env)) }, // this case is currently untested "macos" => { @@ -49,6 +50,41 @@ impl Configuration { config } + + pub fn load_envs(&mut self) { + // get environment variables + let username_env = env::var("GT_USERNAME").unwrap_or_else(|_| "".to_string()); + let password_env = env::var("GT_PASSWORD").unwrap_or_else(|_| "".to_string()); + let api_token_env = env::var("GT_API_TOKEN").unwrap_or_else(|_| "".to_string()); + + // get struct fields + let mut user_config = self.username.as_ref().unwrap(); + let mut password_config = self.password.as_ref().unwrap(); + let mut api_token_config = self.api_token.as_ref().unwrap(); + + // check and see if the env vars are empty + // if they are not, put the env vars in place of the config property + if username_env != "".to_string() { + self.username = Some(username_env); + } else { + println!("cannot find username env var"); + } + + if password_env != "".to_string() { + password_config = &password_env.deref().to_string(); + } else { + println!("cannot find password env var"); + } + + if api_token_env != "".to_string() { + api_token_config = &api_token_env.deref().to_string(); + } else { + println!("cannot find api token env var"); + } + + println!("{:?}", &self); + + } } impl Default for Configuration { diff --git a/src/main.rs b/src/main.rs index 4718910..28536d4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,7 +16,8 @@ use clap::ArgMatches; fn main() { let matches: ArgMatches = arg::get_args(); - let config = crate::config::Configuration::new(); + let mut config = crate::config::Configuration::new(); + config.load_envs(); let auth = request::Authentication::new(&config); let request = auth.request_chooser(config.clone(), matches); @@ -47,11 +48,11 @@ fn main() { } if repo_matches.is_present("push") { - repo.push_to_remote(&request) + repo.push_to_remote(&request, &config) } if repo_matches.is_present("pull") { - repo.pull_from_remote(&request) + repo.pull_from_remote(&request, &config) } if repo_matches.is_present("clone") {