Fixed passing config to create_config function, some more test needed before pulling to main

This commit is contained in:
Anynomouss
2025-03-01 13:28:41 +01:00
parent 0c5bdde4e8
commit 7b1144e4ec
4 changed files with 70 additions and 48 deletions
Generated
-1
View File
@@ -1531,7 +1531,6 @@ dependencies = [
"byteorder",
"chrono",
"data-encoding",
"dirs 2.0.2",
"ed25519-dalek",
"futures 0.3.31",
"grin_api",
+46 -33
View File
@@ -43,7 +43,8 @@ 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_wallet_path(
/// Function to get wallet dir and create dirs if not existing
pub fn get_wallet_path(
chain_type: &global::ChainTypes,
create_path: bool,
) -> Result<PathBuf, ConfigError> {
@@ -68,8 +69,8 @@ fn get_wallet_path(
}
}
// Smart function to find the most likely .api_secret location for the node
fn get_node_path(
/// Smart function to find the most likely .api_secret location for the node
pub fn get_node_path(
data_path: Option<PathBuf>,
chain_type: &global::ChainTypes,
) -> Result<PathBuf, ConfigError> {
@@ -110,6 +111,7 @@ fn get_node_path(
node_path
}
/// Checks if config in current working dir
fn check_config_current_dir(path: &str) -> Option<PathBuf> {
let p = env::current_dir();
let mut c = match p {
@@ -176,6 +178,7 @@ fn check_api_secret_file(
}
/// Handles setup and detection of paths for wallet
// Use config file in a) current directory as template, or b) in top path, or c) .grin home
pub fn initial_setup_wallet(
chain_type: &global::ChainTypes,
data_path: Option<PathBuf>,
@@ -186,47 +189,57 @@ pub fn initial_setup_wallet(
fs::create_dir_all(p)?;
}
}
// Use config file in a) current directory, or b) in top path, or c) .grin home
// Get wallet data_dir path, create it if it does not exist
let wallet_path = match data_path {
Some(p) => {
let mut abs_wallet_path = std::env::current_dir()?;
abs_wallet_path.push(p);
abs_wallet_path
}
None => get_wallet_path(chain_type, create_path)?,
};
// Get path to the node dir(s), first try top dir, if no node api_secret return home./grin
let node_path = get_node_path(Some(wallet_path.clone()), chain_type)?;
// Get path to the newwly to be created config file
let mut config_path = wallet_path.clone();
config_path.push(WALLET_CONFIG_FILE_NAME);
// Check if config exists in working dir, if so, use it as template for newly created config
let (path, config) = if let Some(p) = check_config_current_dir(WALLET_CONFIG_FILE_NAME) {
let mut path = p.clone();
path.pop();
(path, GlobalWalletConfig::new(p.to_str().unwrap())?)
let mut config = GlobalWalletConfig::new(p.to_str().unwrap())?;
// Use template config, update data_dir, network and api secrets
config.config_file_path = Some(config_path);
config.update_paths(&wallet_path, &node_path);
(path, config)
} else {
let wallet_path = match data_path {
Some(p) => p,
None => get_wallet_path(chain_type, create_path)?,
};
// Get path to wallet and node dir(s)
let node_path = get_node_path(Some(wallet_path.clone()), chain_type)?;
// Get path to default config file
let mut config_path = wallet_path.clone();
config_path.push(WALLET_CONFIG_FILE_NAME);
// Return defaults config updated with node and wallet dir and chain dir
match config_path.clone().exists() {
false => {
let mut default_config = GlobalWalletConfig::for_chain(chain_type);
default_config.config_file_path = Some(config_path);
// Update paths relative to current dir, assumes node secret is in user home
// Update paths relative to current dir
default_config.update_paths(&wallet_path, &node_path);
// Write config file, otherwise defaults will be writen
default_config
.write_to_file(
&default_config
.config_file_path
.clone()
.unwrap()
.to_str()
.unwrap(),
false,
None,
None,
)
.unwrap_or_else(|e| {
panic!("Error creating config file: {}", e);
});
// default_config
// .write_to_file(
// &default_config
// .config_file_path
// .clone()
// .unwrap()
// .to_str()
// .unwrap(),
// false,
// None,
// None,
// )
// .unwrap_or_else(|e| {
// panic!("Error creating config file: {}", e);
// });
(wallet_path, default_config)
}
+11 -7
View File
@@ -16,8 +16,8 @@
use crate::api::TLSConfig;
use crate::apiwallet::{try_slatepack_sync_workflow, Owner};
use crate::config::{TorConfig, WalletConfig};
use crate::core::core;
use crate::config::{TorConfig, WalletConfig, WALLET_CONFIG_FILE_NAME};
use crate::core::{core, global};
use crate::error::Error;
use crate::impls::PathToSlatepack;
use crate::impls::SlateGetter as _;
@@ -82,13 +82,17 @@ where
K: keychain::Keychain + 'static,
{
// Assume global chain type has already been initialized.
let chain_type = global::get_chain_type();
let mut w_lock = owner_api.wallet_inst.lock();
let p = w_lock.lc_provider()?;
// Config creation was moved to main, only create new if config is ot in arguments
// let chain_type = global::get_chain_type();
// args.config, config: &WalletConfig) {
// p.create_config(&chain_type, WALLET_CONFIG_FILE_NAME, None, None, None)?;
// }
p.create_config(
&chain_type,
WALLET_CONFIG_FILE_NAME,
Some(args.config),
None,
None,
)?;
p.create_wallet(
None,
args.recovery_phrase,
+13 -7
View File
@@ -87,11 +87,12 @@ where
None => None,
},
};
let wallet = match wallet_config {
Some(w) => w,
// Check if config was provided, if not load default and set update to "true"
let (wallet, update) = match wallet_config {
Some(w) => (w, false),
None => match default_config.members.as_ref() {
Some(m) => m.clone().wallet,
None => WalletConfig::default(),
Some(m) => (m.clone().wallet, true),
None => (WalletConfig::default(), true),
},
};
let tor = match tor_config {
@@ -137,10 +138,15 @@ where
return Ok(());
}
let mut abs_path = std::env::current_dir()?;
abs_path.push(self.data_dir.clone());
let mut abs_path_node = get_node_path?;
abs_path_node.push(self.data_dir.clone());
let mut absolute_path_wallet = std::env::current_dir()?;
absolute_path_wallet.push(self.data_dir.clone());
default_config.update_paths(&abs_path);
// if no config provided, update defaults
if update == true {
default_config.update_paths(&abs_path_node, &absolute_path_wallet);
};
let res =
default_config.write_to_file(config_file_name.to_str().unwrap(), false, None, None);
if let Err(e) = res {