feat: add SQLite write-ahead log and shared memory files.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import os
|
||||
import json
|
||||
import logging
|
||||
from threading import Lock
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
CONFIG_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "config")
|
||||
SECURITY_FILE = os.path.join(CONFIG_DIR, "security.json")
|
||||
|
||||
# Ensure config directory exists
|
||||
os.makedirs(CONFIG_DIR, exist_ok=True)
|
||||
|
||||
_auth_lock = Lock()
|
||||
|
||||
def _load_security_data() -> dict:
|
||||
with _auth_lock:
|
||||
if not os.path.exists(SECURITY_FILE):
|
||||
return {}
|
||||
try:
|
||||
with open(SECURITY_FILE, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to read security.json: {e}")
|
||||
return {}
|
||||
|
||||
def _save_security_data(data: dict) -> bool:
|
||||
with _auth_lock:
|
||||
try:
|
||||
with open(SECURITY_FILE, "w", encoding="utf-8") as f:
|
||||
json.dump(data, f, ensure_ascii=False, indent=4)
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to write security.json: {e}")
|
||||
return False
|
||||
|
||||
def has_password() -> bool:
|
||||
"""Kiểm tra xem hệ thống đã thiết lập mật khẩu chưa."""
|
||||
data = _load_security_data()
|
||||
pwd = data.get("settings_password", "")
|
||||
return bool(pwd.strip())
|
||||
|
||||
def verify_password(pwd: str) -> bool:
|
||||
"""Xác thực mật khẩu. Trả về True nếu đúng hoặc nếu hệ thống chưa yêu cầu mật khẩu."""
|
||||
if not has_password():
|
||||
return True
|
||||
|
||||
data = _load_security_data()
|
||||
return data.get("settings_password", "") == pwd
|
||||
|
||||
def set_password(old_pwd: str, new_pwd: str) -> tuple[bool, str]:
|
||||
"""Cập nhật mật khẩu mới."""
|
||||
data = _load_security_data()
|
||||
current_pwd = data.get("settings_password", "")
|
||||
|
||||
# Nếu đang có pass, phải nhập đúng pass cũ
|
||||
if current_pwd and old_pwd != current_pwd:
|
||||
return False, "Mật khẩu cũ không chính xác."
|
||||
|
||||
data["settings_password"] = new_pwd
|
||||
if _save_security_data(data):
|
||||
if not new_pwd:
|
||||
return True, "Đã gỡ bỏ mật khẩu bảo vệ."
|
||||
return True, "Cập nhật mật khẩu thành công."
|
||||
return False, "Lỗi khi lưu mật khẩu, vui lòng xem log."
|
||||
Reference in New Issue
Block a user