From 0926a74c1c79f5005bc47cc773768ac8a2feb6cc Mon Sep 17 00:00:00 2001
From: Aleksander <170264518+t-aleksander@users.noreply.github.com>
Date: Mon, 1 Dec 2025 15:38:45 +0100
Subject: [PATCH 1/7] vpn system status detection, logs, attempt 1
---
src-tauri/Client.entitlements | 4 +
src-tauri/src/apple.rs | 588 ++++++++++++++----
src-tauri/src/appstate.rs | 10 +-
src-tauri/src/bin/defguard-client.rs | 25 +
src-tauri/src/commands.rs | 7 +-
.../src/log_watcher/global_log_watcher.rs | 313 +++++++++-
src-tauri/src/log_watcher/mod.rs | 34 +
.../src/log_watcher/service_log_watcher.rs | 281 ++++++++-
src-tauri/src/utils.rs | 96 ++-
src/i18n/en/index.ts | 4 +-
src/i18n/fr/index.ts | 4 +-
src/i18n/i18n-types.ts | 12 +-
src/pages/client/clientAPI/types.ts | 2 +-
.../GlobalLogs/GlobalLogsSourceSelect.tsx | 4 +-
swift/extension/VPNExtension/Adapter.swift | 66 +-
swift/extension/VPNExtension/FileLogger.swift | 237 +++++++
.../VPNExtension/PacketTunnelProvider.swift | 42 +-
.../VPNExtension/VPNExtension.entitlements | 4 +
18 files changed, 1463 insertions(+), 270 deletions(-)
create mode 100644 swift/extension/VPNExtension/FileLogger.swift
diff --git a/src-tauri/Client.entitlements b/src-tauri/Client.entitlements
index 552baf4b..863984e6 100644
--- a/src-tauri/Client.entitlements
+++ b/src-tauri/Client.entitlements
@@ -14,5 +14,9 @@
82GZ7KN29J.net.defguard
com.apple.developer.team-identifier
82GZ7KN29J
+ com.apple.security.application-groups
+
+ group.net.defguard
+
diff --git a/src-tauri/src/apple.rs b/src-tauri/src/apple.rs
index 4d7fafb6..ac8ba450 100644
--- a/src-tauri/src/apple.rs
+++ b/src-tauri/src/apple.rs
@@ -1,39 +1,324 @@
//! Structures used for interchangeability with the Swift code.
use std::{
+ collections::HashMap,
hint::spin_loop,
net::IpAddr,
+ ptr::NonNull,
str::FromStr,
sync::{
- atomic::{AtomicBool, AtomicUsize, Ordering},
- mpsc::channel,
- Arc, Mutex,
+ atomic::{AtomicBool, Ordering},
+ mpsc::{self, channel, Receiver, RecvTimeoutError, Sender},
+ Arc, LazyLock, Mutex,
},
+ time::Duration,
};
use block2::RcBlock;
use defguard_wireguard_rs::{host::Peer, key::Key, net::IpAddrMask};
-use objc2::{rc::Retained, runtime::AnyObject};
+use objc2::{
+ rc::Retained,
+ runtime::{AnyObject, ProtocolObject},
+};
use objc2_foundation::{
ns_string, NSArray, NSData, NSDate, NSDictionary, NSError, NSMutableArray, NSMutableDictionary,
- NSNumber, NSRunLoop, NSString,
+ NSNotification, NSNotificationCenter, NSNotificationName, NSNumber, NSObjectProtocol,
+ NSOperationQueue, NSRunLoop, NSString,
};
use objc2_network_extension::{
- NETunnelProviderManager, NETunnelProviderProtocol, NETunnelProviderSession,
+ NETunnelProviderManager, NETunnelProviderProtocol, NETunnelProviderSession, NEVPNStatus,
};
use serde::{Deserialize, Serialize};
use sqlx::SqliteExecutor;
+use tauri::{AppHandle, Emitter, Manager};
use crate::{
+ active_connections::find_connection,
+ appstate::AppState,
database::{
models::{location::Location, tunnel::Tunnel, wireguard_keys::WireguardKeys, Id},
DB_POOL,
},
error::Error,
+ events::EventKey,
utils::{DEFAULT_ROUTE_IPV4, DEFAULT_ROUTE_IPV6},
+ ConnectionType,
};
const PLUGIN_BUNDLE_ID: &str = "net.defguard.VPNExtension";
+static OBSERVER_COMMS: LazyLock<(
+ Mutex>,
+ Mutex