@@ -6,8 +6,6 @@ use anyhow::{Context, Result, anyhow};
66use serde:: { Deserialize , Serialize } ;
77
88const 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 ) ]
1311pub 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-
273253fn 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