feat: Реализован новый веб-интерфейс и бэкенд для управления VPN-клиентом, включая списки серверов, элементы управления прокси и опции конфигурации.
This commit is contained in:
80
web/app/storage.py
Normal file
80
web/app/storage.py
Normal file
@@ -0,0 +1,80 @@
|
||||
import json
|
||||
from .config import (
|
||||
DATA_DIR, SUBSCRIPTION_FILE, FALLBACK_FILE, PROXY_ENABLED_FILE,
|
||||
START_TIME_FILE, DEFAULT_FALLBACK
|
||||
)
|
||||
|
||||
def save_subscription(url: str, selected_server: str = None, user_info: dict = None):
|
||||
"""Save subscription URL, selected server and user info to file"""
|
||||
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
||||
data = {
|
||||
"url": url,
|
||||
"selectedServer": selected_server,
|
||||
"userInfo": user_info
|
||||
}
|
||||
SUBSCRIPTION_FILE.write_text(json.dumps(data, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
def load_subscription() -> dict:
|
||||
"""Load subscription from file"""
|
||||
if SUBSCRIPTION_FILE.exists():
|
||||
try:
|
||||
return json.loads(SUBSCRIPTION_FILE.read_text())
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
def save_fallback_config(enabled: bool, host: str, port: int):
|
||||
"""Save fallback proxy configuration to file"""
|
||||
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
||||
data = {
|
||||
"enabled": enabled,
|
||||
"host": host,
|
||||
"port": port
|
||||
}
|
||||
FALLBACK_FILE.write_text(json.dumps(data, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
def load_fallback_config() -> dict:
|
||||
"""Load fallback proxy configuration from file"""
|
||||
if FALLBACK_FILE.exists():
|
||||
try:
|
||||
return json.loads(FALLBACK_FILE.read_text())
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
return DEFAULT_FALLBACK.copy()
|
||||
|
||||
|
||||
def save_proxy_enabled(enabled: bool):
|
||||
"""Save proxy enabled state to file"""
|
||||
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
||||
PROXY_ENABLED_FILE.write_text(json.dumps({"enabled": enabled}))
|
||||
|
||||
|
||||
def load_proxy_enabled() -> bool:
|
||||
"""Load proxy enabled state from file"""
|
||||
if PROXY_ENABLED_FILE.exists():
|
||||
try:
|
||||
data = json.loads(PROXY_ENABLED_FILE.read_text())
|
||||
return data.get("enabled", True)
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
return True # Default: proxy enabled
|
||||
|
||||
|
||||
def save_start_time(start_time: float):
|
||||
"""Save VPN start time to file"""
|
||||
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
||||
START_TIME_FILE.write_text(json.dumps({"startTime": start_time}))
|
||||
|
||||
|
||||
def load_start_time() -> float:
|
||||
"""Load VPN start time from file"""
|
||||
if START_TIME_FILE.exists():
|
||||
try:
|
||||
data = json.loads(START_TIME_FILE.read_text())
|
||||
return data.get("startTime", 0.0)
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
return 0.0
|
||||
Reference in New Issue
Block a user