Flying-Music-API / api_auth.py
ZHIWEI666's picture
Upload 7 files
34a9b56 verified
from datetime import datetime
from fastapi import APIRouter
from pydantic import BaseModel
from core import get_db, save_db, AuthReq
router = APIRouter()
class RankingRegisterReq(BaseModel):
username: str
source: str = "ranking"
@router.post("/api/hub/ranking_register")
async def ranking_register(req: RankingRegisterReq):
try:
users = get_db("users.json")
target_name = req.username.strip()
if not target_name or target_name != req.username: return {"status": "error", "message": "首尾不能包含空格且不能为空"}
actual_user = next((u for u in users.keys() if u.lower() == target_name.lower()), None)
if actual_user:
user_info = users[actual_user]
if user_info.get("source") == "ranking":
return {"status": "success", "reg_date": user_info.get("reg_date", datetime.now().strftime("%Y-%m-%d"))}
else:
# 用户已独立注册,现在通过 Ranking 登录,将账号升级为 Ranking 绑定
user_info["password_hash"] = "__ranking_linked__"
user_info["source"] = "ranking"
user_info["last_update"] = datetime.now().strftime("%Y-%m-%d")
save_db(users, "users.json")
return {"status": "success", "reg_date": user_info.get("reg_date", datetime.now().strftime("%Y-%m-%d"))}
reg_date = datetime.now().strftime("%Y-%m-%d")
users[target_name] = { "password_hash": "__ranking_linked__", "reg_date": reg_date, "source": "ranking", "last_update": reg_date }
save_db(users, "users.json")
return {"status": "success", "reg_date": reg_date}
except Exception as e: return {"status": "error", "message": str(e)}
@router.post("/api/hub/login")
async def login(req: AuthReq):
try:
users = get_db("users.json")
actual_user = next((u for u in users.keys() if u.lower() == req.username.lower()), None)
if not actual_user: return {"status": "error", "message": "用户不存在!"}
user_info = users[actual_user]
if user_info.get("source") == "ranking":
return {"status": "success", "reg_date": user_info.get("reg_date", "2026-03-14")}
return {"status": "error", "message": "非Ranking绑定账号无法登录"}
except Exception as e: return {"status": "error", "message": str(e)}
# 🌟 新增:统计社区总人数的接口
@router.get("/api/hub/stats")
async def get_hub_stats():
try:
users = get_db("users.json")
return {"status": "success", "user_count": len(users)}
except Exception as e:
return {"status": "error", "message": str(e)}