Skip to content

Commit 943f63f

Browse files
committed
Preserve manual loopback config overrides
1 parent 393465d commit 943f63f

1 file changed

Lines changed: 40 additions & 20 deletions

File tree

src/config.rs

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ use anyhow::{Context, Result, anyhow};
66
use serde::{Deserialize, Serialize};
77

88
const DEFAULT_APP_CONFIG: &str = include_str!("../assets/defaults/linuxdo-accelerator.toml");
9-
const OLD_DEFAULT_LOOPBACK: &str = "127.0.0.1";
10-
const NEW_DEFAULT_LOOPBACK: &str = "127.211.73.84";
119

1210
#[derive(Debug, Clone, Serialize, Deserialize)]
1311
pub struct AppConfig {
@@ -91,7 +89,6 @@ impl AppConfig {
9189
if let Ok(mut config) = toml::from_str::<AppConfig>(&content) {
9290
let defaults = default_app_config();
9391
let mut changed = false;
94-
changed |= migrate_loopback_defaults(&mut config);
9592
changed |= merge_missing_values(&mut config.doh_endpoints, defaults.doh_endpoints);
9693
changed |= merge_missing_values(&mut config.proxy_domains, defaults.proxy_domains);
9794
changed |= merge_missing_values(&mut config.hosts_domains, defaults.hosts_domains);
@@ -138,7 +135,6 @@ impl AppConfig {
138135
ca_common_name: legacy.ca_common_name,
139136
server_common_name: legacy.server_common_name,
140137
};
141-
migrate_loopback_defaults(&mut config);
142138
merge_missing_values(&mut config.doh_endpoints, defaults.doh_endpoints);
143139
merge_missing_values(&mut config.proxy_domains, defaults.proxy_domains);
144140
merge_missing_values(&mut config.hosts_domains, defaults.hosts_domains);
@@ -254,26 +250,50 @@ fn merge_missing_values(target: &mut Vec<String>, defaults: Vec<String>) -> bool
254250
changed
255251
}
256252

257-
fn migrate_loopback_defaults(config: &mut AppConfig) -> bool {
258-
let mut changed = false;
259-
260-
if config.listen_host == OLD_DEFAULT_LOOPBACK {
261-
config.listen_host = NEW_DEFAULT_LOOPBACK.to_string();
262-
changed = true;
263-
}
264-
265-
if config.hosts_ip == OLD_DEFAULT_LOOPBACK {
266-
config.hosts_ip = NEW_DEFAULT_LOOPBACK.to_string();
267-
changed = true;
268-
}
269-
270-
changed
271-
}
272-
273253
fn normalize_toml(content: &str) -> String {
274254
content
275255
.lines()
276256
.map(str::trim_end)
277257
.collect::<Vec<_>>()
278258
.join("\n")
279259
}
260+
261+
#[cfg(test)]
262+
mod tests {
263+
use super::{AppConfig, DEFAULT_APP_CONFIG};
264+
use std::sync::atomic::{AtomicU64, Ordering};
265+
266+
static NEXT_ID: AtomicU64 = AtomicU64::new(1);
267+
268+
#[test]
269+
fn load_or_create_preserves_manual_loopback_override() {
270+
let root = create_test_dir("preserve-manual-loopback");
271+
let config_path = root.join("linuxdo-accelerator.toml");
272+
let customized = DEFAULT_APP_CONFIG.replace("127.211.73.84", "127.0.0.1");
273+
std::fs::write(&config_path, customized).unwrap();
274+
275+
let config = AppConfig::load_or_create(&config_path).unwrap();
276+
277+
assert_eq!(config.listen_host, "127.0.0.1");
278+
assert_eq!(config.hosts_ip, "127.0.0.1");
279+
280+
cleanup_test_dir(&root);
281+
}
282+
283+
fn create_test_dir(name: &str) -> std::path::PathBuf {
284+
let mut path = std::env::temp_dir();
285+
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
286+
path.push(format!("linuxdo-accelerator-config-{name}-{id}"));
287+
if path.exists() {
288+
let _ = std::fs::remove_dir_all(&path);
289+
}
290+
std::fs::create_dir_all(&path).unwrap();
291+
path
292+
}
293+
294+
fn cleanup_test_dir(path: &std::path::Path) {
295+
if path.exists() {
296+
let _ = std::fs::remove_dir_all(path);
297+
}
298+
}
299+
}

0 commit comments

Comments
 (0)