mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-06 09:48:58 +00:00
fix(core): restrict implicit config merge to explicit config files (#2127)
This commit is contained in:
+39
-9
@@ -788,20 +788,33 @@ impl Cli {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl NetworkOptions {
|
impl NetworkOptions {
|
||||||
fn can_merge(&self, cfg: &TomlConfigLoader, config_file_count: usize) -> bool {
|
fn can_merge(
|
||||||
|
&self,
|
||||||
|
cfg: &TomlConfigLoader,
|
||||||
|
source: ConfigSource,
|
||||||
|
explicit_config_file_count: usize,
|
||||||
|
config_dir_file_count: usize,
|
||||||
|
) -> bool {
|
||||||
if (*self) == NetworkOptions::default() {
|
if (*self) == NetworkOptions::default() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if config_file_count == 1 {
|
|
||||||
|
if source == ConfigSource::CliConfigFile
|
||||||
|
&& explicit_config_file_count == 1
|
||||||
|
&& config_dir_file_count == 0
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let Some(network_name) = &self.network_name else {
|
let Some(network_name) = &self.network_name else {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
if cfg.get_network_identity().network_name == *network_name {
|
|
||||||
return true;
|
if source == ConfigSource::ConfigDir {
|
||||||
|
return cfg.get_network_identity().network_name == *network_name;
|
||||||
}
|
}
|
||||||
false
|
|
||||||
|
cfg.get_network_identity().network_name == *network_name
|
||||||
}
|
}
|
||||||
|
|
||||||
fn merge_into(&self, cfg: &TomlConfigLoader) -> anyhow::Result<()> {
|
fn merge_into(&self, cfg: &TomlConfigLoader) -> anyhow::Result<()> {
|
||||||
@@ -1122,6 +1135,12 @@ impl NetworkOptions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
enum ConfigSource {
|
||||||
|
CliConfigFile,
|
||||||
|
ConfigDir,
|
||||||
|
}
|
||||||
|
|
||||||
impl LoggingConfigLoader for &LoggingOptions {
|
impl LoggingConfigLoader for &LoggingOptions {
|
||||||
fn get_console_logger_config(&self) -> ConsoleLoggerConfig {
|
fn get_console_logger_config(&self) -> ConsoleLoggerConfig {
|
||||||
ConsoleLoggerConfig {
|
ConsoleLoggerConfig {
|
||||||
@@ -1304,8 +1323,13 @@ async fn run_main(cli: Cli) -> anyhow::Result<()> {
|
|||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let explicit_config_file_count = cli.config_file.as_ref().map_or(0, |files| files.len());
|
||||||
|
let mut config_dir_file_count = 0;
|
||||||
let mut config_files = if let Some(v) = cli.config_file {
|
let mut config_files = if let Some(v) = cli.config_file {
|
||||||
v.clone()
|
v.iter()
|
||||||
|
.cloned()
|
||||||
|
.map(|path| (path, ConfigSource::CliConfigFile))
|
||||||
|
.collect()
|
||||||
} else {
|
} else {
|
||||||
vec![]
|
vec![]
|
||||||
};
|
};
|
||||||
@@ -1326,7 +1350,8 @@ async fn run_main(cli: Cli) -> anyhow::Result<()> {
|
|||||||
if ext != "toml" {
|
if ext != "toml" {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
config_files.push(path);
|
config_dir_file_count += 1;
|
||||||
|
config_files.push((path, ConfigSource::ConfigDir));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let config_file_count = config_files.len();
|
let config_file_count = config_files.len();
|
||||||
@@ -1339,7 +1364,7 @@ async fn run_main(cli: Cli) -> anyhow::Result<()> {
|
|||||||
cli.network_options.network_name.is_some()
|
cli.network_options.network_name.is_some()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
for config_file in config_files {
|
for (config_file, source) in config_files {
|
||||||
let (cfg, mut control) = load_config_from_file(
|
let (cfg, mut control) = load_config_from_file(
|
||||||
&config_file,
|
&config_file,
|
||||||
cli.config_dir.as_ref(),
|
cli.config_dir.as_ref(),
|
||||||
@@ -1347,7 +1372,12 @@ async fn run_main(cli: Cli) -> anyhow::Result<()> {
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
if cli.network_options.can_merge(&cfg, config_file_count) {
|
if cli.network_options.can_merge(
|
||||||
|
&cfg,
|
||||||
|
source,
|
||||||
|
explicit_config_file_count,
|
||||||
|
config_dir_file_count,
|
||||||
|
) {
|
||||||
cli.network_options
|
cli.network_options
|
||||||
.merge_into(&cfg)
|
.merge_into(&cfg)
|
||||||
.with_context(|| format!("failed to merge config from cli: {:?}", config_file))?;
|
.with_context(|| format!("failed to merge config from cli: {:?}", config_file))?;
|
||||||
|
|||||||
Reference in New Issue
Block a user