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."""