39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
import json
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
from werkzeug.security import generate_password_hash, check_password_hash
|
|
|
|
from .config import DATA_DIR
|
|
|
|
ADMIN_PATH = DATA_DIR / "admin.json"
|
|
DEFAULT_USERNAME = "cxf"
|
|
DEFAULT_PASSWORD = "NianJie1018"
|
|
|
|
|
|
def ensure_admin_file(username: str = DEFAULT_USERNAME, password: str = DEFAULT_PASSWORD) -> None:
|
|
"""Create admin file with hashed password if missing."""
|
|
if ADMIN_PATH.exists():
|
|
return
|
|
data = {
|
|
"username": username,
|
|
"password_hash": generate_password_hash(password),
|
|
}
|
|
ADMIN_PATH.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
|
|
|
|
|
|
def get_admin() -> Optional[dict]:
|
|
if not ADMIN_PATH.exists():
|
|
return None
|
|
try:
|
|
return json.loads(ADMIN_PATH.read_text(encoding="utf-8"))
|
|
except Exception:
|
|
return None
|
|
|
|
|
|
def verify_credentials(username: str, password: str) -> bool:
|
|
admin = get_admin()
|
|
if not admin:
|
|
return False
|
|
return username == admin.get("username") and check_password_hash(admin.get("password_hash", ""), password)
|