From 9d0a641f3a7758e001a8c89effe575332420fa0b Mon Sep 17 00:00:00 2001 From: Krishna-web-hub Date: Sun, 22 Mar 2026 23:45:03 +0530 Subject: [PATCH 1/3] Fixing the issue #1775 --- src/vorta/borg/create.py | 46 +++++++---- src/vorta/network_status/network_manager.py | 88 ++++++++++++++++++--- 2 files changed, 105 insertions(+), 29 deletions(-) diff --git a/src/vorta/borg/create.py b/src/vorta/borg/create.py index 38658305a..317e7004e 100644 --- a/src/vorta/borg/create.py +++ b/src/vorta/borg/create.py @@ -113,25 +113,39 @@ def prepare(cls, profile): return ret network_status_monitor = get_network_status_monitor() - current_wifi = network_status_monitor.get_current_wifi() - if current_wifi is not None: - wifi_is_disallowed = WifiSettingModel.select().where( - (WifiSettingModel.ssid == current_wifi) - & (WifiSettingModel.allowed == False) # noqa - & (WifiSettingModel.profile == profile) + network_status_monitor = get_network_status_monitor() + + wifi_list = network_status_monitor.get_all_wifi_ssids() + + # sanitize list + clean_wifi_list = [] + for w in wifi_list: + if w: + try: + clean_wifi_list.append(str(w)) + except Exception: + pass + + wifi_list = clean_wifi_list + + print(f"DEBUG: all connected wifi: {wifi_list}") + + # 🚨 IMPORTANT: avoid empty IN () + if wifi_list: + disallowed_wifi = WifiSettingModel.select().where( + (WifiSettingModel.ssid.in_(wifi_list)) + & (WifiSettingModel.allowed == False) + & (WifiSettingModel.profile == profile.id) ) - if wifi_is_disallowed.count() > 0 and profile.repo.is_remote_repo(): - ret['message'] = trans_late('messages', 'Current Wifi is not allowed.') - return ret - if ( - profile.repo.is_remote_repo() - and profile.dont_run_on_metered_networks - and network_status_monitor.is_network_metered() - ): - ret['message'] = trans_late('messages', 'Not running backup over metered connection.') - return ret + count = disallowed_wifi.count() + print(f"DEBUG: disallowed wifi count: {count}") + if count > 0: + ret['message'] = trans_late('messages', 'Current Wifi is not allowed.') + return ret + else: + print("DEBUG: no wifi → skipping restriction") ret['profile'] = profile ret['repo'] = profile.repo diff --git a/src/vorta/network_status/network_manager.py b/src/vorta/network_status/network_manager.py index 601afe4e5..87d72995a 100644 --- a/src/vorta/network_status/network_manager.py +++ b/src/vorta/network_status/network_manager.py @@ -8,6 +8,7 @@ from PyQt6 import QtDBus from PyQt6.QtCore import QObject, QVersionNumber, pyqtSignal, pyqtSlot +from PyQt6.QtDBus import QDBusArgument from vorta.network_status.abc import NetworkStatusMonitor, SystemWifiInfo @@ -36,24 +37,60 @@ def is_network_active(self) -> bool: except DBusException: logger.exception("Failed to check connectivity state. Assuming connected") return True + def get_all_wifi_ssids(self) -> list[str]: + print("DEBUG: get_all_wifi_ssids called") + + wifi_ssids = [] + + try: + active_paths = self._nm.get_active_connections_paths() + print("DEBUG: active paths:", active_paths) + + for path in active_paths: + try: + active_connection = self._nm.get_active_connection_info(path) + print("DEBUG: checking connection type:", active_connection.type) + + # Ignore non-WiFi (Ethernet etc.) + if active_connection.type != "802-11-wireless": + continue + + settings = self._nm.get_settings(active_connection.connection) + print("DEBUG: raw settings:", settings) + + ssid = self._get_ssid_from_settings(settings) + + if ssid: + print("DEBUG: found wifi SSID:", ssid) + wifi_ssids.append(ssid) + + except Exception as e: + print("DEBUG: error processing connection:", e) + continue + + print("DEBUG: final wifi list:", wifi_ssids) + return wifi_ssids + + except Exception as e: + print("DEBUG: get_all_wifi_ssids error:", e) + return [] def get_current_wifi(self) -> str | None: - # Only check the primary connection. VPN over WiFi will still show the WiFi as Primary Connection. - # We don't check all active connections, as NM won't disable WiFi when connecting a cable. try: - active_connection_path = self._nm.get_primary_connection_path() - if not active_connection_path: + connection_path = self._nm.get_primary_connection_path() + if not connection_path: + return None + + active_connection = self._nm.get_active_connection_info(connection_path) + + if active_connection.type != "802-11-wireless": return None - active_connection = self._nm.get_active_connection_info(active_connection_path) - if active_connection.type == '802-11-wireless': - settings = self._nm.get_settings(active_connection.connection) - ssid = self._get_ssid_from_settings(settings) - if ssid: - return ssid - except DBusException: - logger.exception("Failed to get currently connected WiFi network, assuming none") - return None + settings = self._nm.get_settings(active_connection.connection) + return self._get_ssid_from_settings(settings) + + except Exception: + return None def get_known_wifis(self) -> list[SystemWifiInfo]: wifis: list[SystemWifiInfo] = [] try: @@ -135,6 +172,31 @@ def get_system_nm_adapter(cls) -> NetworkManagerDBusAdapter: if not nm_adapter.isValid(): raise UnsupportedException("Can't connect to NetworkManager") return nm_adapter + + def get_active_connections_paths(self) -> list[str]: + try: + iface = QtDBus.QDBusInterface( + self.BUS_NAME, + self.NM_PATH, + "org.freedesktop.DBus.Properties", + self._bus, + ) + + reply = iface.call("Get", self.INTERFACE_NAME, "ActiveConnections") + + if not reply.arguments(): + return [] + + paths = reply.arguments()[0] + + print("DEBUG raw:", paths) + print("DEBUG type:", type(paths)) + + return [str(p) for p in paths] + + except Exception: + logger.exception("Failed to get active connections") + return [] @pyqtSlot("unsigned int") def networkStateChanged(self, state: int) -> None: From a0d793de8c2f418d589826b5497ad08d29a78693 Mon Sep 17 00:00:00 2001 From: Krishna-web-hub Date: Sun, 22 Mar 2026 23:55:51 +0530 Subject: [PATCH 2/3] Doing small changes. --- src/vorta/borg/create.py | 10 ---------- src/vorta/network_status/network_manager.py | 1 - 2 files changed, 11 deletions(-) diff --git a/src/vorta/borg/create.py b/src/vorta/borg/create.py index 317e7004e..4edf16b3f 100644 --- a/src/vorta/borg/create.py +++ b/src/vorta/borg/create.py @@ -111,13 +111,10 @@ def prepare(cls, profile): if n_backup_folders == 0 and '--paths-from-command' not in extra_cmd_options: ret['message'] = trans_late('messages', 'Add some folders to back up first.') return ret - network_status_monitor = get_network_status_monitor() network_status_monitor = get_network_status_monitor() wifi_list = network_status_monitor.get_all_wifi_ssids() - - # sanitize list clean_wifi_list = [] for w in wifi_list: if w: @@ -125,22 +122,16 @@ def prepare(cls, profile): clean_wifi_list.append(str(w)) except Exception: pass - wifi_list = clean_wifi_list - print(f"DEBUG: all connected wifi: {wifi_list}") - - # 🚨 IMPORTANT: avoid empty IN () if wifi_list: disallowed_wifi = WifiSettingModel.select().where( (WifiSettingModel.ssid.in_(wifi_list)) & (WifiSettingModel.allowed == False) & (WifiSettingModel.profile == profile.id) ) - count = disallowed_wifi.count() print(f"DEBUG: disallowed wifi count: {count}") - if count > 0: ret['message'] = trans_late('messages', 'Current Wifi is not allowed.') return ret @@ -164,7 +155,6 @@ def prepare(cls, profile): 'Your current Borg version does not support ZStd compression.', ) return ret - cmd = [ 'borg', 'create', diff --git a/src/vorta/network_status/network_manager.py b/src/vorta/network_status/network_manager.py index 87d72995a..577a788fe 100644 --- a/src/vorta/network_status/network_manager.py +++ b/src/vorta/network_status/network_manager.py @@ -51,7 +51,6 @@ def get_all_wifi_ssids(self) -> list[str]: active_connection = self._nm.get_active_connection_info(path) print("DEBUG: checking connection type:", active_connection.type) - # Ignore non-WiFi (Ethernet etc.) if active_connection.type != "802-11-wireless": continue From e24e009f025fc72072416854cfdbfff2252f53f8 Mon Sep 17 00:00:00 2001 From: Krishna-web-hub Date: Tue, 24 Mar 2026 06:12:29 +0530 Subject: [PATCH 3/3] Small fixing --- src/vorta/network_status/network_manager.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/vorta/network_status/network_manager.py b/src/vorta/network_status/network_manager.py index 577a788fe..d26508bb3 100644 --- a/src/vorta/network_status/network_manager.py +++ b/src/vorta/network_status/network_manager.py @@ -38,40 +38,30 @@ def is_network_active(self) -> bool: logger.exception("Failed to check connectivity state. Assuming connected") return True def get_all_wifi_ssids(self) -> list[str]: - print("DEBUG: get_all_wifi_ssids called") - wifi_ssids = [] try: active_paths = self._nm.get_active_connections_paths() - print("DEBUG: active paths:", active_paths) for path in active_paths: try: active_connection = self._nm.get_active_connection_info(path) - print("DEBUG: checking connection type:", active_connection.type) if active_connection.type != "802-11-wireless": continue settings = self._nm.get_settings(active_connection.connection) - print("DEBUG: raw settings:", settings) - ssid = self._get_ssid_from_settings(settings) if ssid: - print("DEBUG: found wifi SSID:", ssid) wifi_ssids.append(ssid) except Exception as e: - print("DEBUG: error processing connection:", e) continue - print("DEBUG: final wifi list:", wifi_ssids) return wifi_ssids except Exception as e: - print("DEBUG: get_all_wifi_ssids error:", e) return [] def get_current_wifi(self) -> str | None: