diff --git a/Cargo.lock b/Cargo.lock index bee516a..103411e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -1531,6 +1531,7 @@ dependencies = [ "byteorder", "chrono", "data-encoding", + "dirs 2.0.2", "ed25519-dalek", "futures 0.3.31", "grin_api", diff --git a/config/src/config.rs b/config/src/config.rs index 9db501e..327f16b 100644 --- a/config/src/config.rs +++ b/config/src/config.rs @@ -35,7 +35,7 @@ use crate::util::logger::LoggingConfig; /// Wallet configuration file name pub const WALLET_CONFIG_FILE_NAME: &str = "grin-wallet.toml"; const WALLET_LOG_FILE_NAME: &str = "grin-wallet.log"; -const GRIN_HOME: &str = ".grin"; +pub const GRIN_HOME: &str = ".grin"; /// Wallet data directory pub const GRIN_WALLET_DIR: &str = "wallet_data"; /// Node API secret @@ -43,28 +43,28 @@ pub const API_SECRET_FILE_NAME: &str = ".foreign_api_secret"; /// Owner API secret pub const OWNER_API_SECRET_FILE_NAME: &str = ".owner_api_secret"; -fn get_grin_path( +fn get_grin_wallet_path( chain_type: &global::ChainTypes, create_path: bool, ) -> Result { // Check if grin dir exists - let mut grin_path = match dirs::home_dir() { + let mut grin_wallet_path = match dirs::home_dir() { Some(p) => p, None => PathBuf::new(), }; - grin_path.push(GRIN_HOME); - grin_path.push(chain_type.shortname()); + grin_wallet_path.push(GRIN_HOME); + grin_wallet_path.push(chain_type.shortname()); // Create if the default path doesn't exist - if !grin_path.exists() && create_path { - fs::create_dir_all(grin_path.clone())?; + if !grin_wallet_path.exists() && create_path { + fs::create_dir_all(grin_wallet_path.clone())?; } - if !grin_path.exists() { + if !grin_wallet_path.exists() { Err(ConfigError::PathNotFoundError(String::from( - grin_path.to_str().unwrap(), + grin_wallet_path.to_str().unwrap(), ))) } else { - Ok(grin_path) + Ok(grin_wallet_path) } } @@ -83,22 +83,6 @@ fn check_config_current_dir(path: &str) -> Option { None } -/// Checks if the node api secret in wallet dir, else return default path -fn check_node_api_exists(path: &str) -> Option { - let p = env::current_dir(); - let mut c = match p { - Ok(c) => c, - Err(_) => { - return None; - } - }; - c.push(path); - if c.exists() { - return Some(c); - } - None -} - /// Whether a config file exists at the given directory pub fn config_file_exists(path: &str) -> bool { let mut path = PathBuf::from(path); @@ -136,11 +120,11 @@ fn check_api_secret_file( data_path: Option, file_name: &str, ) -> Result<(), ConfigError> { - let grin_path = match data_path { + let grin_wallet_path = match data_path { Some(p) => p, - None => get_grin_path(chain_type, false)?, + None => get_grin_wallet_path(chain_type, false)?, }; - let mut api_secret_path = grin_path; + let mut api_secret_path = grin_wallet_path; api_secret_path.push(file_name); if !api_secret_path.exists() { init_api_secret(&api_secret_path) @@ -167,13 +151,14 @@ pub fn initial_setup_wallet( (path, GlobalWalletConfig::new(p.to_str().unwrap())?) } else { // Check if grin dir exists - let grin_path = match data_path { + let node_path = get_grin_wallet_path(chain_type, create_path)?; + let grin_wallet_path = match data_path { Some(p) => p, - None => get_grin_path(chain_type, create_path)?, + None => node_path.clone(), }; // Get path to default config file - let mut config_path = grin_path.clone(); + let mut config_path = grin_wallet_path.clone(); config_path.push(WALLET_CONFIG_FILE_NAME); // Return defaults if file doesn't exist @@ -181,9 +166,21 @@ pub fn initial_setup_wallet( false => { let mut default_config = GlobalWalletConfig::for_chain(chain_type); default_config.config_file_path = Some(config_path); - // update paths relative to current dir - default_config.update_paths(&grin_path); - (grin_path, default_config) + // update paths relative to current dir, assumes node secret is in user home + default_config.update_paths(&grin_wallet_path, &node_path); + // Write config file, otherwise default will writen + default_config.write_to_file( + &default_config + .config_file_path + .clone() + .unwrap() + .to_str() + .unwrap(), + false, + None, + None, + ); + (grin_wallet_path, default_config) } true => { let mut path = config_path.clone(); @@ -195,9 +192,10 @@ pub fn initial_setup_wallet( } } }; - check_api_secret_file(chain_type, Some(path.clone()), OWNER_API_SECRET_FILE_NAME)?; check_api_secret_file(chain_type, Some(path), API_SECRET_FILE_NAME)?; + // println!("{:#?}",&config.members.clone().unwrap().wallet.node_api_secret_path); + // println!("CONFIG APPEARS TO BE OK"); Ok(config) } @@ -284,7 +282,7 @@ impl GlobalWalletConfig { } /// Update paths - pub fn update_paths(&mut self, wallet_home: &PathBuf) { + pub fn update_paths(&mut self, wallet_home: &PathBuf, node_home: &PathBuf) { let mut wallet_path = wallet_home.clone(); wallet_path.push(GRIN_WALLET_DIR); self.members.as_mut().unwrap().wallet.data_file_dir = @@ -293,15 +291,12 @@ impl GlobalWalletConfig { secret_path.push(OWNER_API_SECRET_FILE_NAME); self.members.as_mut().unwrap().wallet.api_secret_path = Some(secret_path.to_str().unwrap().to_owned()); - let mut node_secret_path = wallet_home.clone(); + let mut node_secret_path = node_home.clone(); node_secret_path.push(API_SECRET_FILE_NAME); - // Set node API secret path to the wallet dir if it exists, else keep default home dir - // if node_secret_path.exists(){ - // self.members.as_mut().unwrap().wallet.node_api_secret_path = - // Some(node_secret_path.to_str().unwrap().to_owned()); - // println!("It node path does actually exists") - // } - + dbg!(&node_secret_path); + self.members.as_mut().unwrap().wallet.node_api_secret_path = + Some(node_secret_path.to_str().unwrap().to_owned()); + dbg!(&self.members.as_mut().unwrap().wallet.node_api_secret_path); let mut log_path = wallet_home.clone(); log_path.push(WALLET_LOG_FILE_NAME); self.members diff --git a/impls/Cargo.toml b/impls/Cargo.toml index 7689d61..4dd380f 100644 --- a/impls/Cargo.toml +++ b/impls/Cargo.toml @@ -19,6 +19,7 @@ serde_derive = "1" serde_json = "1" log = "0.4" ring = "0.16" +dirs = "2.0" uuid = { version = "0.8", features = ["serde", "v4"] } chrono = { version = "0.4.11", features = ["serde"] } lazy_static = "1" diff --git a/impls/src/lifecycle/default.rs b/impls/src/lifecycle/default.rs index d0cc606..eb696f2 100644 --- a/impls/src/lifecycle/default.rs +++ b/impls/src/lifecycle/default.rs @@ -13,7 +13,6 @@ // limitations under the License. //! Default wallet lifecycle provider - use crate::config::{ config, GlobalWalletConfig, GlobalWalletConfigMembers, TorConfig, WalletConfig, GRIN_WALLET_DIR, }; @@ -137,10 +136,13 @@ where return Ok(()); } - let mut abs_path = std::env::current_dir()?; - abs_path.push(self.data_dir.clone()); + // let mut abs_path_node = std::env::current_dir()?; + // let mut abs_path_wallet = std::env::current_dir()?; + // abs_path_wallet.push(self.data_dir.clone()); + // abs_path_node.push(self.data_dir.clone()); + // default_config.update_paths(&abs_path_wallet,&abs_path_node); + // println!("here, updating and writing config in default"); - default_config.update_paths(&abs_path); let res = default_config.write_to_file(config_file_name.to_str().unwrap(), false, None, None); if let Err(e) = res { diff --git a/src/bin/grin-wallet.rs b/src/bin/grin-wallet.rs index 3a192fd..50e7455 100644 --- a/src/bin/grin-wallet.rs +++ b/src/bin/grin-wallet.rs @@ -110,6 +110,7 @@ fn real_main() -> i32 { // Load relevant config, try and load a wallet config file // Use defaults for configuration if config file not found anywhere + dbg!(¤t_dir, &create_path); let mut config = match config::initial_setup_wallet(&chain_type, current_dir, create_path) { Ok(c) => c, Err(e) => match e { @@ -138,7 +139,7 @@ fn real_main() -> i32 { "Using wallet configuration file at {}", config.config_file_path.as_ref().unwrap().to_str().unwrap() ); - + println!("here3"); log_build_info(); global::init_global_chain_type( @@ -152,11 +153,14 @@ fn real_main() -> i32 { .unwrap() .clone(), ); - + println!("here4"); global::init_global_accept_fee_base(config.members.as_ref().unwrap().wallet.accept_fee_base()); let wallet_config = config.clone().members.unwrap().wallet; + println!("here5"); let node_client = HTTPNodeClient::new(&wallet_config.check_node_api_http_addr, None).unwrap(); - + println!("here6"); + //dbg!(&config.check_node_api_http_addr, None).unwrap(); + println!("here7"); cmd::wallet_command(&args, config, node_client) }