Очистка полученных сетеевых данных. Узлы. Точки доступа. Всё сразу.
This commit is contained in:
parent
37f9e3abfb
commit
f4aae4f3c4
6 changed files with 151 additions and 41 deletions
|
|
@ -1,5 +1,5 @@
|
|||
from fastapi import APIRouter
|
||||
from .v1 import ufw, websocket, ip, network, auth, subnet
|
||||
from .v1 import ufw, websocket, ip, network, auth, subnet, settings
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
|
@ -10,3 +10,5 @@ router.include_router(network.router, prefix="/network", tags=["Network"])
|
|||
router.include_router(auth.router, prefix="/auth", tags=["Auth"])
|
||||
|
||||
router.include_router(subnet.router, prefix="/subnet", tags=["Subnet"])
|
||||
|
||||
router.include_router(settings.router, prefix="/settings", tags=["Settings"])
|
||||
|
|
|
|||
62
SRV/api/v1/settings.py
Normal file
62
SRV/api/v1/settings.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
from fastapi import APIRouter, HTTPException
|
||||
from services.settings_service import SettingsService
|
||||
|
||||
router = APIRouter()
|
||||
settings_service = SettingsService()
|
||||
|
||||
@router.post("/clear_subnet")
|
||||
def clear_subnet():
|
||||
"""Очищает данные узлов подсети, сохранённые в devices.json.
|
||||
|
||||
Удаляет все записи об узлах подсети, оставляя файл пустым.
|
||||
|
||||
Returns:
|
||||
dict: Словарь с сообщением об успешной очистке.
|
||||
|
||||
Raises:
|
||||
HTTPException: Если произошла ошибка очистки (status_code=500).
|
||||
"""
|
||||
try:
|
||||
success = settings_service.clear_subnet()
|
||||
if success:
|
||||
return {"message": "Данные узлов подсети успешно очищены"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Ошибка очистки: {str(e)}")
|
||||
|
||||
@router.post("/clear_wifi")
|
||||
def clear_wifi():
|
||||
"""Очищает данные точек доступа Wi-Fi, сохранённые в wifi.json.
|
||||
|
||||
Удаляет все записи о точках доступа, оставляя файл пустым.
|
||||
|
||||
Returns:
|
||||
dict: Словарь с сообщением об успешной очистке.
|
||||
|
||||
Raises:
|
||||
HTTPException: Если произошла ошибка очистки (status_code=500).
|
||||
"""
|
||||
try:
|
||||
success = settings_service.clear_wifi()
|
||||
if success:
|
||||
return {"message": "Данные точек доступа Wi-Fi успешно очищены"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Ошибка очистки: {str(e)}")
|
||||
|
||||
@router.post("/clear_all_data")
|
||||
def clear_all_data():
|
||||
"""Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах.
|
||||
|
||||
Удаляет все записи из devices.json и wifi.json.
|
||||
|
||||
Returns:
|
||||
dict: Словарь с сообщением об успешной очистке.
|
||||
|
||||
Raises:
|
||||
HTTPException: Если произошла ошибка очистки (status_code=500).
|
||||
"""
|
||||
try:
|
||||
success = settings_service.clear_all_data()
|
||||
if success:
|
||||
return {"message": "Все сетевые данные успешно очищены"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Ошибка очистки: {str(e)}")
|
||||
|
|
@ -75,32 +75,21 @@ class AuthService:
|
|||
db_user = self.storage.get_user_by_username(user.username)
|
||||
if not db_user:
|
||||
logger.error(f"Пользователь {user.username} не найден")
|
||||
raise HTTPException(status_code=401,
|
||||
detail="Неверный логин или пароль")
|
||||
if not self.storage.verify_password(user.password,
|
||||
db_user["password_hash"]):
|
||||
raise HTTPException(status_code=401, detail="Неверный логин или пароль")
|
||||
if not self.storage.verify_password(user.password, db_user["password_hash"]):
|
||||
logger.error(
|
||||
f"Неверный пароль для пользователя {user.username}")
|
||||
raise HTTPException(status_code=401,
|
||||
detail="Неверный логин или пароль")
|
||||
raise HTTPException(status_code=401, detail="Неверный логин или пароль")
|
||||
access_token = self.create_access_token(
|
||||
data={"sub": user.username})
|
||||
session_id = self.session_storage.create_session(
|
||||
user.username, access_token, client_id)
|
||||
logger.info(f"Пользователь {user.username} успешно авторизован")
|
||||
return {
|
||||
"access_token":
|
||||
access_token,
|
||||
"token_type":
|
||||
"bearer",
|
||||
"session_id":
|
||||
session_id,
|
||||
"user":
|
||||
UserResponse(
|
||||
id=db_user["id"],
|
||||
username=db_user["username"],
|
||||
is_admin=db_user["is_admin"],
|
||||
),
|
||||
"access_token": access_token,
|
||||
"token_type": "bearer",
|
||||
"session_id": session_id,
|
||||
"user": UserResponse(id=db_user["id"], username=db_user["username"], is_admin=db_user["is_admin"]),
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
|
|
@ -119,11 +108,8 @@ class AuthService:
|
|||
db_user = self.storage.get_user_by_username(username)
|
||||
if not db_user:
|
||||
logger.error(f"Пользователь {username} не найден")
|
||||
raise HTTPException(status_code=401,
|
||||
detail="Пользователь не найден")
|
||||
return UserResponse(id=db_user["id"],
|
||||
username=db_user["username"],
|
||||
is_admin=db_user["is_admin"])
|
||||
raise HTTPException(status_code=401, detail="Пользователь не найден")
|
||||
return UserResponse(id=db_user["id"], username=db_user["username"], is_admin=db_user["is_admin"])
|
||||
|
||||
def get_user_by_session(self, client_id: str) -> dict:
|
||||
"""Получает пользователя и токен по client_id"""
|
||||
|
|
@ -131,24 +117,17 @@ class AuthService:
|
|||
if not session:
|
||||
logger.error(
|
||||
f"Сессия для client_id {client_id} не найдена или истекла")
|
||||
raise HTTPException(status_code=401,
|
||||
detail="Сессия недействительна")
|
||||
raise HTTPException(status_code=401, detail="Сессия недействительна")
|
||||
username = session["username"]
|
||||
token = session["token"]
|
||||
db_user = self.storage.get_user_by_username(username)
|
||||
if not db_user:
|
||||
logger.error(f"Пользователь {username} не найден")
|
||||
raise HTTPException(status_code=401,
|
||||
detail="Пользователь не найден")
|
||||
raise HTTPException(status_code=401, detail="Пользователь не найден")
|
||||
return {
|
||||
"user":
|
||||
UserResponse(
|
||||
id=db_user["id"],
|
||||
username=db_user["username"],
|
||||
is_admin=db_user["is_admin"],
|
||||
),
|
||||
"access_token":
|
||||
token,
|
||||
UserResponse(id=db_user["id"], username=db_user["username"], is_admin=db_user["is_admin"]),
|
||||
"access_token": token
|
||||
}
|
||||
|
||||
def logout(self, client_id: str):
|
||||
|
|
@ -164,5 +143,4 @@ class AuthService:
|
|||
except Exception as e:
|
||||
logger.error(
|
||||
f"Ошибка при выходе из системы: {type(e).__name__} - {str(e)}")
|
||||
raise HTTPException(status_code=500,
|
||||
detail="Ошибка при выходе из системы")
|
||||
raise HTTPException(status_code=500, detail="Ошибка при выходе из системы")
|
||||
|
|
|
|||
68
SRV/services/settings_service.py
Normal file
68
SRV/services/settings_service.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import json
|
||||
import logging
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class SettingsService:
|
||||
"""Сервис для управления настройками и очистки данных сети."""
|
||||
|
||||
def __init__(self):
|
||||
self.subnet_file = "storage/devices/devices.json"
|
||||
self.wifi_file = "storage/wifi/wifi.json"
|
||||
|
||||
def clear_subnet(self) -> bool:
|
||||
"""Очищает данные узлов подсети в файле devices.json.
|
||||
|
||||
Returns:
|
||||
bool: True, если очистка успешна.
|
||||
|
||||
Raises:
|
||||
Exception: Если произошла ошибка при записи в файл.
|
||||
"""
|
||||
try:
|
||||
with open(self.subnet_file, "w") as f:
|
||||
json.dump([], f)
|
||||
logger.info("Данные узлов подсети успешно очищены")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка очистки узлов подсети: {str(e)}")
|
||||
raise
|
||||
|
||||
def clear_wifi(self) -> bool:
|
||||
"""Очищает данные точек доступа Wi-Fi в файле wifi.json.
|
||||
|
||||
Returns:
|
||||
bool: True, если очистка успешна.
|
||||
|
||||
Raises:
|
||||
Exception: Если произошла ошибка при записи в файл.
|
||||
"""
|
||||
try:
|
||||
with open(self.wifi_file, "w") as f:
|
||||
json.dump([], f)
|
||||
logger.info("Данные точек доступа Wi-Fi успешно очищены")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка очистки точек доступа Wi-Fi: {str(e)}")
|
||||
raise
|
||||
|
||||
def clear_all_data(self) -> bool:
|
||||
"""Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах.
|
||||
|
||||
Returns:
|
||||
bool: True, если очистка успешна.
|
||||
|
||||
Raises:
|
||||
Exception: Если произошла ошибка при записи в один из файлов.
|
||||
"""
|
||||
try:
|
||||
with open(self.subnet_file, "w") as f:
|
||||
json.dump([], f)
|
||||
with open(self.wifi_file, "w") as f:
|
||||
json.dump([], f)
|
||||
logger.info("Все сетевые данные успешно очищены")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка очистки всех сетевых данных: {str(e)}")
|
||||
raise
|
||||
|
|
@ -230,12 +230,12 @@ class DeviceStorage:
|
|||
Хранит устройства в JSON-файле и удаляет устаревшие записи.
|
||||
"""
|
||||
|
||||
def __init__(self, storage_path: str = "etc/gonets/SRV/storage/devices/devices.json"):
|
||||
def __init__(self, storage_path: str = "storage/devices/devices.json"):
|
||||
"""Инициализирует хранилище устройств с указанным путём.
|
||||
|
||||
Args:
|
||||
storage_path (str, optional): Путь к файлу хранения.
|
||||
По умолчанию "etc/gonets/SRV/storage/devices/devices.json".
|
||||
По умолчанию "storage/devices/devices.json".
|
||||
|
||||
Создаёт родительские директории, если они не существуют.
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -22,12 +22,12 @@ class WifiStorage:
|
|||
в JSON-файле на диске.
|
||||
"""
|
||||
|
||||
def __init__(self, storage_path: str = "etc/gonets/SRV/storage/wifi/wifi.json"):
|
||||
def __init__(self, storage_path: str = "storage/wifi/wifi.json"):
|
||||
"""Инициализирует объект хранилища Wi-Fi с указанным путём к файлу.
|
||||
|
||||
Args:
|
||||
storage_path (str, optional): Путь к файлу для хранения заметок.
|
||||
По умолчанию "etc/gonets/SRV/storage/wifi/wifi.json".
|
||||
По умолчанию "storage/wifi/wifi.json".
|
||||
|
||||
Создаёт родительские директории, если они не существуют.
|
||||
"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue