Обработка ошибок с nmcli

This commit is contained in:
parent 4309487562
commit 43f0bc1cdc

View file

@ -33,19 +33,34 @@ class WifiConnectionService:
try: try:
if not self.interface: if not self.interface:
return False, "Wi-Fi-интерфейс не доступен" return False, "Wi-Fi-интерфейс не доступен"
result = subprocess.run(["nmcli", "-f", "SSID", "device", "wifi", "list"], capture_output=True, text=True) result = subprocess.run(["nmcli", "-f", "SSID", "device", "wifi", "list"], capture_output=True, text=True)
if ssid not in result.stdout: if ssid not in result.stdout:
return False, f"Сеть с SSID {ssid} не найдена" return False, f"Сеть с SSID {ssid} не найдена в списке доступных сетей"
cmd = ["nmcli", "device", "wifi", "connect", ssid, "password", password] 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}") logger.info(f"Успешное подключение к сети {ssid}")
return True, None return True, None
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
logger.error(f"Ошибка подключения к {ssid}: {e.stderr}") 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: except Exception as e:
logger.error(f"Неизвестная ошибка при подключении к {ssid}: {str(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]]: def disconnect(self, ssid: str) -> Tuple[bool, Optional[str]]:
"""Отключается от Wi-Fi сети по указанному SSID.""" """Отключается от Wi-Fi сети по указанному SSID."""
@ -70,10 +85,10 @@ class WifiConnectionService:
return True, f"Активное подключение с SSID {ssid} не найдено" return True, f"Активное подключение с SSID {ssid} не найдено"
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
logger.error(f"Ошибка при отключении от {ssid}: {e.stderr}") logger.error(f"Ошибка при отключении от {ssid}: {e.stderr}")
return False, f"Ошибка отключения: {e.stderr}" return False, f"Ошибка отключения от {ssid}: {e.stderr}"
except Exception as e: except Exception as e:
logger.error(f"Неизвестная ошибка при отключении от {ssid}: {str(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]]: def get_status(self) -> Tuple[bool, Optional[str]]:
"""Проверяет статус текущего подключения к Wi-Fi.""" """Проверяет статус текущего подключения к Wi-Fi."""