Server-side: resolve DNS for GitHub domains, save to files
()
| 156 | |
| 157 | /// Server-side: resolve DNS for GitHub domains, save to files |
| 158 | pub async fn server_fetch_hosts() -> Result<(), String> { |
| 159 | let domains = dns::get_github_domains(); |
| 160 | let hosts = dns::fetch_hosts(&domains); |
| 161 | let now = chrono::Local::now().format("%Y-%m-%d %H:%M:%S").to_string(); |
| 162 | |
| 163 | let hosts_json = serde_json::to_string(&hosts).map_err(|e| e.to_string())?; |
| 164 | let hosts_text = dns::format_hosts_text(&hosts, &now); |
| 165 | |
| 166 | let exe_dir = std::env::current_exe() |
| 167 | .ok() |
| 168 | .and_then(|p| p.parent().map(|p| p.to_path_buf())) |
| 169 | .unwrap_or_else(|| std::path::PathBuf::from(".")); |
| 170 | |
| 171 | std::fs::write(exe_dir.join("hosts.json"), &hosts_json) |
| 172 | .map_err(|e| format!("写入hosts.json失败: {}", e))?; |
| 173 | std::fs::write(exe_dir.join("hosts.txt"), &hosts_text) |
| 174 | .map_err(|e| format!("写入hosts.txt失败: {}", e))?; |
| 175 | |
| 176 | Ok(()) |
| 177 | } |
| 178 | |
| 179 | /// Simple HTTP server for serving hosts files (async with graceful shutdown) |
| 180 | #[cfg(feature = "gui")] |
no test coverage detected