From 43f0bc1cdc6c6e3759395c12499d16864ed065b4 Mon Sep 17 00:00:00 2001 From: "s.galanskiy" Date: Thu, 19 Jun 2025 11:57:04 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D1=81=20?= =?UTF-8?q?nmcli?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SRV/services/connect_service.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/SRV/services/connect_service.py b/SRV/services/connect_service.py index 181c64b..d33f970 100644 --- a/SRV/services/connect_service.py +++ b/SRV/services/connect_service.py @@ -33,19 +33,34 @@ class WifiConnectionService: try: if not self.interface: return False, "Wi-Fi-интерфейс не доступен" + result = subprocess.run(["nmcli", "-f", "SSID", "device", "wifi", "list"], capture_output=True, text=True) if ssid not in result.stdout: - return False, f"Сеть с SSID {ssid} не найдена" + return False, f"Сеть с SSID {ssid} не найдена в списке доступных сетей" + cmd = ["nmcli", "device", "wifi", "connect", ssid, "password", password] - subprocess.run(cmd, capture_output=True, text=True, check=True) + process = subprocess.run(cmd, capture_output=True, text=True, check=False) + if process.returncode != 0: + error_msg = process.stderr.lower() + if "secrets were required" in error_msg or "authentication failed" in error_msg or "802-11-wireless-security.psk: недействительное свойство" in process.stderr: + return False, f"Ошибка подключения к {ssid}: Неверный пароль" + elif "no network with ssid" in error_msg: + return False, f"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана" + else: + return False, f"Ошибка подключения к {ssid}: {process.stderr}" logger.info(f"Успешное подключение к сети {ssid}") return True, None except subprocess.CalledProcessError as e: logger.error(f"Ошибка подключения к {ssid}: {e.stderr}") - return False, f"Ошибка подключения: {e.stderr}" + error_msg = e.stderr.lower() + if "secrets were required" in error_msg or "authentication failed" in error_msg or "802-11-wireless-security.psk: недействительное свойство" in e.stderr: + return False, f"Ошибка подключения к {ssid}: Неверный пароль" + elif "no network with ssid" in error_msg: + return False, f"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана" + return False, f"Ошибка подключения к {ssid}: {e.stderr}" except Exception as e: logger.error(f"Неизвестная ошибка при подключении к {ssid}: {str(e)}") - return False, f"Неизвестная ошибка: {str(e)}" + return False, f"Ошибка подключения к {ssid}: Неизвестная ошибка - {str(e)}" def disconnect(self, ssid: str) -> Tuple[bool, Optional[str]]: """Отключается от Wi-Fi сети по указанному SSID.""" @@ -70,10 +85,10 @@ class WifiConnectionService: return True, f"Активное подключение с SSID {ssid} не найдено" except subprocess.CalledProcessError as e: logger.error(f"Ошибка при отключении от {ssid}: {e.stderr}") - return False, f"Ошибка отключения: {e.stderr}" + return False, f"Ошибка отключения от {ssid}: {e.stderr}" except Exception as e: logger.error(f"Неизвестная ошибка при отключении от {ssid}: {str(e)}") - return False, f"Ошибка отключения: {str(e)}" + return False, f"Ошибка отключения от {ssid}: {str(e)}" def get_status(self) -> Tuple[bool, Optional[str]]: """Проверяет статус текущего подключения к Wi-Fi."""