44 lines
2.0 KiB
Python
44 lines
2.0 KiB
Python
from fastapi import APIRouter, Cookie, HTTPException, Request
|
|
from fastapi.responses import HTMLResponse
|
|
|
|
from app.db import auth_db
|
|
from app.web.shared import login_redirect, require_admin
|
|
|
|
def build_router(templates):
|
|
router = APIRouter()
|
|
|
|
@router.get("/admin.html", response_class=HTMLResponse)
|
|
async def admin_page(request: Request, altcoin_session: str = Cookie(default="")):
|
|
if not auth_db.get_user_by_session_token(altcoin_session):
|
|
return login_redirect()
|
|
try:
|
|
require_admin(altcoin_session)
|
|
except HTTPException as e:
|
|
return HTMLResponse(content=f"<meta charset=utf-8><h2>需要管理员权限</h2><p>{e.detail}</p><a href=/app>返回看板</a>", status_code=e.status_code)
|
|
return templates.TemplateResponse(request=request, name="admin.html", context={"show_nav": True})
|
|
|
|
@router.get("/api/admin/check")
|
|
async def api_admin_check(altcoin_session: str = Cookie(default="")):
|
|
try:
|
|
user = require_admin(altcoin_session)
|
|
return {"is_admin": True, "email": user.get("email", "")}
|
|
except HTTPException:
|
|
return {"is_admin": False}
|
|
|
|
@router.get("/api/admin/stats")
|
|
async def api_admin_stats(altcoin_session: str = Cookie(default="")):
|
|
require_admin(altcoin_session)
|
|
return auth_db.get_admin_stats()
|
|
|
|
@router.get("/api/admin/users")
|
|
async def api_admin_users(search: str = "", offset: int = 0, limit: int = 50, tab: str = "all", altcoin_session: str = Cookie(default="")):
|
|
require_admin(altcoin_session)
|
|
return auth_db.get_admin_users(search=search, offset=offset, limit=limit, tab=tab)
|
|
|
|
@router.get("/api/admin/orders")
|
|
async def api_admin_orders(search: str = "", offset: int = 0, limit: int = 50, status: str = "all", altcoin_session: str = Cookie(default="")):
|
|
require_admin(altcoin_session)
|
|
return auth_db.get_admin_orders(search=search, offset=offset, limit=limit, status=status)
|
|
|
|
return router
|