功能: - 激活码管理 (Pro/Auto 两种类型) - 账号池管理 - 设备绑定记录 - 使用日志 - 搜索/筛选功能 - 禁用/启用功能 (支持退款参考) - 全局设置 (换号间隔、额度消耗等) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
from fastapi import FastAPI, Request
|
|
from fastapi.staticfiles import StaticFiles
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import HTMLResponse, FileResponse
|
|
from contextlib import asynccontextmanager
|
|
import os
|
|
|
|
from app.database import engine, Base
|
|
from app.api import client_router, admin_router
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
# 启动时创建数据库表
|
|
Base.metadata.create_all(bind=engine)
|
|
yield
|
|
# 关闭时清理
|
|
|
|
|
|
app = FastAPI(
|
|
title="CursorPro 管理后台",
|
|
description="Cursor 账号管理系统 API",
|
|
version="1.0.0",
|
|
lifespan=lifespan
|
|
)
|
|
|
|
# CORS 配置
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
# 静态文件
|
|
static_path = os.path.join(os.path.dirname(__file__), "..", "static")
|
|
if os.path.exists(static_path):
|
|
app.mount("/static", StaticFiles(directory=static_path), name="static")
|
|
|
|
# 模板路径
|
|
templates_path = os.path.join(os.path.dirname(__file__), "..", "templates")
|
|
|
|
# 注册路由
|
|
app.include_router(client_router)
|
|
app.include_router(admin_router)
|
|
|
|
|
|
@app.get("/", response_class=HTMLResponse)
|
|
async def index():
|
|
"""管理后台首页"""
|
|
index_file = os.path.join(templates_path, "index.html")
|
|
if os.path.exists(index_file):
|
|
return FileResponse(index_file, media_type="text/html")
|
|
return HTMLResponse(content="""
|
|
<html>
|
|
<head><title>CursorPro 管理后台</title></head>
|
|
<body>
|
|
<h1>CursorPro 管理后台</h1>
|
|
<p>请访问 <a href="/docs">/docs</a> 查看 API 文档</p>
|
|
</body>
|
|
</html>
|
|
""")
|
|
|
|
|
|
@app.get("/health")
|
|
async def health_check():
|
|
"""健康检查"""
|
|
return {"status": "ok"}
|