creating full directory structure on init

This commit is contained in:
Jędrzej Stuczyński
2023-05-26 16:49:19 +01:00
parent 6711a3bb3c
commit e0e5317b44
9 changed files with 95 additions and 33 deletions
+9 -4
View File
@@ -27,15 +27,20 @@ mod template;
const DEFAULT_CLIENTS_DIR: &str = "clients";
/// Derive default path to client's config file.
/// It should get resolved to `$HOME/.nym/clients/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
/// Derive default path to clients's config directory.
/// It should get resolved to `$HOME/.nym/mixnodes/<id>/config`
pub fn default_config_directory<P: AsRef<Path>>(id: P) -> PathBuf {
must_get_home()
.join(NYM_DIR)
.join(DEFAULT_CLIENTS_DIR)
.join(id)
.join(DEFAULT_CONFIG_DIR)
.join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to client's config file.
/// It should get resolved to `$HOME/.nym/clients/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
default_config_directory(id).join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to client's data directory where files, such as keys, are stored.
+10 -1
View File
@@ -1,7 +1,9 @@
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
use crate::client::config::default_config_filepath;
use crate::client::config::{
default_config_directory, default_config_filepath, default_data_directory,
};
use crate::commands::try_upgrade_v1_1_13_config;
use crate::{
client::config::Config,
@@ -16,6 +18,7 @@ use nym_sphinx::addressing::clients::Recipient;
use serde::Serialize;
use std::fmt::Display;
use std::net::IpAddr;
use std::{fs, io};
use tap::TapFallible;
#[derive(Args, Clone)]
@@ -119,6 +122,11 @@ impl Display for InitResults {
}
}
fn init_paths(id: &str) -> io::Result<()> {
fs::create_dir_all(default_data_directory(id))?;
fs::create_dir_all(default_config_directory(id))
}
pub(crate) async fn execute(args: &Init) -> Result<(), ClientError> {
eprintln!("Initialising client...");
@@ -131,6 +139,7 @@ pub(crate) async fn execute(args: &Init) -> Result<(), ClientError> {
eprintln!("Client \"{id}\" was already initialised before");
true
} else {
init_paths(id)?;
false
};
+10 -1
View File
@@ -2,7 +2,9 @@
// SPDX-License-Identifier: Apache-2.0
use crate::commands::try_upgrade_v1_1_13_config;
use crate::config::{default_config_filepath, Config};
use crate::config::{
default_config_directory, default_config_filepath, default_data_directory, Config,
};
use crate::{
commands::{override_config, OverrideConfig},
error::Socks5ClientError,
@@ -14,6 +16,7 @@ use nym_crypto::asymmetric::identity;
use nym_sphinx::addressing::clients::Recipient;
use serde::Serialize;
use std::fmt::Display;
use std::{fs, io};
use tap::TapFallible;
#[derive(Args, Clone)]
@@ -121,6 +124,11 @@ impl Display for InitResults {
}
}
fn init_paths(id: &str) -> io::Result<()> {
fs::create_dir_all(default_data_directory(id))?;
fs::create_dir_all(default_config_directory(id))
}
pub(crate) async fn execute(args: &Init) -> Result<(), Socks5ClientError> {
eprintln!("Initialising client...");
@@ -134,6 +142,7 @@ pub(crate) async fn execute(args: &Init) -> Result<(), Socks5ClientError> {
eprintln!("SOCKS5 client \"{id}\" was already initialised before");
true
} else {
init_paths(id)?;
false
};
+9 -4
View File
@@ -22,15 +22,20 @@ mod template;
const DEFAULT_SOCKS5_CLIENTS_DIR: &str = "socks5-clients";
/// Derive default path to client's config file.
/// It should get resolved to `$HOME/.nym/socks5-clients/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
/// Derive default path to clients's config directory.
/// It should get resolved to `$HOME/.nym/socks5-clients/<id>/config`
pub fn default_config_directory<P: AsRef<Path>>(id: P) -> PathBuf {
must_get_home()
.join(NYM_DIR)
.join(DEFAULT_SOCKS5_CLIENTS_DIR)
.join(id)
.join(DEFAULT_CONFIG_DIR)
.join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to client's config file.
/// It should get resolved to `$HOME/.nym/socks5-clients/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
default_config_directory(id).join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to client's data directory where files, such as keys, are stored.
+8 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2020-2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
use crate::config::default_config_filepath;
use crate::config::{default_config_directory, default_config_filepath, default_data_directory};
use crate::{
commands::{override_config, OverrideConfig},
config::Config,
@@ -12,6 +12,7 @@ use nym_crypto::asymmetric::{encryption, identity};
use std::error::Error;
use std::net::IpAddr;
use std::path::PathBuf;
use std::{fs, io};
#[derive(Args, Clone)]
pub struct Init {
@@ -91,6 +92,11 @@ impl From<Init> for OverrideConfig {
}
}
fn init_paths(id: &str) -> io::Result<()> {
fs::create_dir_all(default_data_directory(id))?;
fs::create_dir_all(default_config_directory(id))
}
pub async fn execute(args: Init) -> Result<(), Box<dyn Error + Send + Sync>> {
eprintln!("Initialising gateway {}...", args.id);
@@ -102,6 +108,7 @@ pub async fn execute(args: Init) -> Result<(), Box<dyn Error + Send + Sync>> {
);
true
} else {
init_paths(&args.id)?;
false
};
+9 -4
View File
@@ -35,15 +35,20 @@ const DEFAULT_MAXIMUM_CONNECTION_BUFFER_SIZE: usize = 2000;
const DEFAULT_STORED_MESSAGE_FILENAME_LENGTH: u16 = 16;
const DEFAULT_MESSAGE_RETRIEVAL_LIMIT: i64 = 100;
/// Derive default path to gateways's config file.
/// It should get resolved to `$HOME/.nym/gateways/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
/// Derive default path to gateway's config directory.
/// It should get resolved to `$HOME/.nym/gateways/<id>/config`
pub fn default_config_directory<P: AsRef<Path>>(id: P) -> PathBuf {
must_get_home()
.join(NYM_DIR)
.join(DEFAULT_GATEWAYS_DIR)
.join(id)
.join(DEFAULT_CONFIG_DIR)
.join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to gateways's config file.
/// It should get resolved to `$HOME/.nym/gateways/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
default_config_directory(id).join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to gateways's data directory where files, such as keys, are stored.
+14 -4
View File
@@ -3,12 +3,15 @@
use super::OverrideConfig;
use crate::commands::override_config;
use crate::config::{default_config_filepath, Config};
use crate::config::{
default_config_directory, default_config_filepath, default_data_directory, Config,
};
use crate::node::MixNode;
use clap::Args;
use nym_bin_common::output_format::OutputFormat;
use nym_crypto::asymmetric::{encryption, identity};
use std::net::IpAddr;
use std::{fs, io};
#[derive(Args, Clone)]
pub(crate) struct Init {
@@ -54,6 +57,11 @@ impl From<Init> for OverrideConfig {
}
}
fn init_paths(id: &str) -> io::Result<()> {
fs::create_dir_all(default_data_directory(id))?;
fs::create_dir_all(default_config_directory(id))
}
pub(crate) fn execute(args: &Init) {
let override_config_fields = OverrideConfig::from(args.clone());
let id = override_config_fields.id.clone();
@@ -63,6 +71,7 @@ pub(crate) fn execute(args: &Init) {
eprintln!("Mixnode \"{id}\" was already initialised before! Config information will be overwritten (but keys will be kept)!");
true
} else {
init_paths(&id).expect("failed to initialise storage paths");
false
};
@@ -97,9 +106,10 @@ pub(crate) fn execute(args: &Init) {
}
let config_save_location = config.default_location();
config
.save_to_default_location()
.expect("Failed to save the config file");
config.save_to_default_location().expect(&*format!(
"Failed to save the config file to {}",
config_save_location.display()
));
eprintln!(
"Saved configuration file to {}",
config_save_location.display()
+18 -13
View File
@@ -3,24 +3,18 @@
use crate::config::persistence::NymConnectPaths;
use crate::config::template::CONFIG_TEMPLATE;
use crate::{
error::{BackendError, Result},
state::State,
};
use crate::error::{BackendError, Result};
use nym_client_core::client::key_manager::persistence::OnDiskKeys;
use nym_client_core::config::Config as BaseClientConfig;
use nym_config_common::{
must_get_home, read_config_from_toml_file, save_formatted_config_to_file, NymConfigTemplate,
DEFAULT_CONFIG_DIR, DEFAULT_CONFIG_FILENAME, DEFAULT_DATA_DIR, NYM_DIR,
};
use nym_crypto::asymmetric::identity;
use nym_socks5_client_core::config::{Config as Socks5CoreConfig, Socks5};
use nym_socks5_client_core::config::Config as Socks5CoreConfig;
use serde::{Deserialize, Serialize};
use std::io;
use std::path::{Path, PathBuf};
use std::sync::Arc;
use std::{fs, io};
use tap::TapFallible;
use tokio::sync::RwLock;
mod persistence;
mod template;
@@ -30,15 +24,20 @@ static SOCKS5_CONFIG_ID: &str = "nym-connect";
// backwards compatibility : )
const DEFAULT_NYM_CONNECT_CLIENTS_DIR: &str = "socks5-clients";
/// Derive default path to nym connects's config file.
/// It should get resolved to `$HOME/.nym/socks5-clients/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
/// Derive default path to clients's config directory.
/// It should get resolved to `$HOME/.nym/socks5-clients/<id>/config`
pub fn default_config_directory<P: AsRef<Path>>(id: P) -> PathBuf {
must_get_home()
.join(NYM_DIR)
.join(DEFAULT_NYM_CONNECT_CLIENTS_DIR)
.join(id)
.join(DEFAULT_CONFIG_DIR)
.join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to client's config file.
/// It should get resolved to `$HOME/.nym/socks5-clients/<id>/config/config.toml`
pub fn default_config_filepath<P: AsRef<Path>>(id: P) -> PathBuf {
default_config_directory(id).join(DEFAULT_CONFIG_FILENAME)
}
/// Derive default path to nym connects's data directory where files, such as keys, are stored.
@@ -117,6 +116,11 @@ impl Config {
}
}
fn init_paths(id: &str) -> io::Result<()> {
fs::create_dir_all(default_data_directory(id))?;
fs::create_dir_all(default_config_directory(id))
}
pub async fn init_socks5_config(provider_address: String, chosen_gateway_id: String) -> Result<()> {
log::trace!("Initialising client...");
@@ -127,6 +131,7 @@ pub async fn init_socks5_config(provider_address: String, chosen_gateway_id: Str
eprintln!("SOCKS5 client \"{id}\" was already initialised before");
true
} else {
init_paths(&id)?;
false
};
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
use crate::cli::try_upgrade_v1_1_13_config;
use crate::config::default_config_filepath;
use crate::config::{default_config_directory, default_config_filepath, default_data_directory};
use crate::{
cli::{override_config, OverrideConfig},
config::Config,
@@ -15,6 +15,7 @@ use nym_crypto::asymmetric::identity;
use nym_sphinx::addressing::clients::Recipient;
use serde::Serialize;
use std::fmt::Display;
use std::{fs, io};
use tap::TapFallible;
#[derive(Args, Clone)]
@@ -95,6 +96,11 @@ impl Display for InitResults {
}
}
fn init_paths(id: &str) -> io::Result<()> {
fs::create_dir_all(default_data_directory(id))?;
fs::create_dir_all(default_config_directory(id))
}
pub(crate) async fn execute(args: &Init) -> Result<(), NetworkRequesterError> {
eprintln!("Initialising client...");
@@ -107,6 +113,7 @@ pub(crate) async fn execute(args: &Init) -> Result<(), NetworkRequesterError> {
eprintln!("Client \"{id}\" was already initialised before");
true
} else {
init_paths(&args.id)?;
false
};