From 7aa4812faaa525b1f2ba75129e2e36f0cd1cac32 Mon Sep 17 00:00:00 2001 From: jakub-tldr <78603704+jakub-tldr@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:44:29 +0100 Subject: [PATCH 1/3] Parse filename as tunnel name, import all DNS --- src-tauri/src/commands.rs | 4 +-- src-tauri/src/wg_config.rs | 31 ++++++++++--------- src/pages/client/clientAPI/clientApi.ts | 4 +-- .../AddTunnelFormCard/AddTunnelFormCard.tsx | 3 +- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 68b43c29..15ac4db5 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -1110,9 +1110,9 @@ pub async fn delete_instance(instance_id: Id, handle: AppHandle) -> Result<(), E } #[tauri::command] -pub fn parse_tunnel_config(config: &str) -> Result { +pub fn parse_tunnel_config(filename: &str, config: &str) -> Result { debug!("Parsing config file"); - let tunnel_config = parse_wireguard_config(config).map_err(|error| { + let tunnel_config = parse_wireguard_config(filename, config).map_err(|error| { error!("{error}"); Error::ConfigParseError(error.to_string()) })?; diff --git a/src-tauri/src/wg_config.rs b/src-tauri/src/wg_config.rs index 083d718d..dc1bac2b 100644 --- a/src-tauri/src/wg_config.rs +++ b/src-tauri/src/wg_config.rs @@ -1,6 +1,6 @@ -use std::{array::TryFromSliceError, net::IpAddr}; - use base64::{prelude::BASE64_STANDARD, DecodeError, Engine}; +use std::path::Path; +use std::{array::TryFromSliceError, net::IpAddr}; use thiserror::Error; use x25519_dalek::{PublicKey, StaticSecret}; @@ -34,9 +34,18 @@ impl From for WireguardConfigParseError { } } -pub fn parse_wireguard_config(config: &str) -> Result { +pub fn parse_wireguard_config( + filename: &str, + config: &str, +) -> Result { let config = ini::Ini::load_from_str(config)?; + let filename = Path::new(filename) + .file_stem() + .and_then(|s| s.to_str()) + .unwrap_or("unknown") + .to_string(); + // Parse Interface section let interface_section = config .section(Some("Interface")) @@ -53,15 +62,7 @@ pub fn parse_wireguard_config(config: &str) -> Result address.to_string(), - None => dns.to_string(), - }); - + let dns = interface_section.get("DNS").map(|dns| dns.to_string()); let pre_up = interface_section.get("PreUp"); let post_up = interface_section.get("PostUp"); let pre_down = interface_section.get("PreDown"); @@ -90,7 +91,7 @@ pub fn parse_wireguard_config(config: &str) -> Result Date: Tue, 20 Jan 2026 11:53:01 +0100 Subject: [PATCH 3/3] fix tests --- src-tauri/src/wg_config.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/wg_config.rs b/src-tauri/src/wg_config.rs index 27d3973e..565d31bd 100644 --- a/src-tauri/src/wg_config.rs +++ b/src-tauri/src/wg_config.rs @@ -123,7 +123,7 @@ mod test { PrivateKey = GAA2X3DW0WakGVx+DsGjhDpTgg50s1MlmrLf24Psrlg= Address = 10.0.0.1/24 ListenPort = 55055 - DNS = 10.0.0.2, tnt, teonite.net + DNS = 10.0.0.2,tnt,teonite.net PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT [Peer] @@ -135,22 +135,20 @@ mod test { "; - let filename = "mylocation.conf"; - let tunnel = parse_wireguard_config(filename, config).unwrap(); - assert_eq!(tunnel.name, filename.to_string()); + let tunnel = parse_wireguard_config("mylocation.conf", config).unwrap(); + assert_eq!(tunnel.name, "mylocation"); assert_eq!( tunnel.prvkey, "GAA2X3DW0WakGVx+DsGjhDpTgg50s1MlmrLf24Psrlg=" ); assert_eq!(tunnel.id, NoId); - assert_eq!(tunnel.name, ""); assert_eq!(tunnel.address, "10.0.0.1/24"); assert_eq!( tunnel.server_pubkey, "BvUB3iZq3U0jZrY6b4KbGhz0IVZzpAdbJiRZGdci9ZU=" ); assert_eq!(tunnel.endpoint, "10.0.0.0:1234"); - assert_eq!(tunnel.dns, Some("10.0.0.2".to_string())); + assert_eq!(tunnel.dns, Some("10.0.0.2,tnt,teonite.net".to_string())); assert_eq!( tunnel.allowed_ips, Some("10.0.0.10/24, 10.2.0.1/24, 0.0.0.0/0".into())