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..565d31bd 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("") + .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 => const updateInstance = async (data: UpdateInstanceRequest): Promise => invokeWrapper('update_instance', data); -const parseTunnelConfig = async (config: string) => - invokeWrapper('parse_tunnel_config', { config: config }); +const parseTunnelConfig = async (filename: string, config: string) => + invokeWrapper('parse_tunnel_config', { filename: filename, config: config }); const saveTunnel = async (tunnel: TunnelRequest) => invokeWrapper('save_tunnel', { tunnel: tunnel }); diff --git a/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx b/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx index 4b9ce224..64bfd814 100644 --- a/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx +++ b/src/pages/client/pages/ClientAddTunnelPage/components/AddTunnelFormCard/AddTunnelFormCard.tsx @@ -181,7 +181,8 @@ export const AddTunnelFormCard = () => { reader.onload = () => { if (reader.result && input.files) { const res = reader.result; - parseTunnelConfig(res as string) + const filename = input.files[0].name; + parseTunnelConfig(filename as string, res as string) .then((data) => { const fileData = data as Partial; const trimed = pickBy(