cursor_auto_register/api_module_documentation.md
2025-05-11 23:06:57 +08:00

14 KiB
Raw Blame History

Module Documentation: api.py

1. 概述 (Overview)

api.py 文件实现了一个基于 FastAPI 的 Web 应用,其核心目的是提供一套 API 接口来管理 Cursor IDE 的账号。此应用不仅支持账号的增删改查、导入导出等基本管理功能,还集成了一个自动化的后台任务来注册新账号,直到达到预设的上限。此外,它还能跟踪账号的使用情况、管理系统配置,并提供与本地 Cursor 客户端集成的功能,如更新认证 Token 和重置机器ID。

主要技术栈包括:

  • FastAPI: 用于构建高性能 API。
  • SQLAlchemy: 作为 ORM 与数据库进行异步交互。
  • Pydantic: 用于数据校验和 API 的请求/响应模型定义。
  • Uvicorn: 作为 ASGI 服务器运行应用。
  • Asyncio: 支持异步操作和并发任务,特别是后台注册进程。

2. 核心功能 (Core Features)

2.1. 账号管理 (Account Management)

该模块提供了全面的账号管理功能:

  • 创建账号: 通过 POST /account 端点,可以添加新的 Cursor 账号信息到数据库。
  • 读取账号:
    • GET /accounts: 获取所有账号列表支持分页、按邮件模糊搜索以及按字段如创建时间、ID、邮箱升序或降序排序。
    • GET /account/random: 随机获取一个当前可用的账号及其 Token。
    • GET /account/{email}/usage: 查询指定邮箱账号的详细使用情况(如剩余额度、天数)并更新数据库记录。
  • 更新账号状态: 通过 PUT /account/id/{id}/status 端点,可以修改指定 ID 账号的状态(如 active, disabled, deleted
  • 删除账号:
    • DELETE /account/{email}: 根据邮箱停用(逻辑删除)或永久删除(物理删除,需 hard_delete=True)账号。
    • DELETE /account/id/{id}: 根据账号 ID 停用或永久删除账号。
  • 导入/导出账号:
    • POST /accounts/import: 从上传的 JSON 文件批量导入或更新账号信息。
    • GET /accounts/export: 将所有账号信息导出为 JSON 文件。

2.2. 自动注册 (Automated Registration)

应用包含一个后台服务,用于自动注册新的 Cursor 账号:

  • 后台任务: run_registration 异步函数是注册逻辑的核心,它会循环尝试注册新账号。
  • 启动与停止:
    • GET /registration/start: 手动启动后台注册任务。如果任务已运行或账号已满,会返回相应状态。
    • GET /registration/stop: 手动停止当前运行的注册任务。
  • 状态查询: GET /registration/status 提供注册任务的当前状态,包括是否正在运行、上次运行时间、下次运行时间、成功/失败次数统计以及当前账号数量与最大限制。
  • 监控模式: 当数据库中激活的账号数量达到 MAX_ACCOUNTS 设定的上限时,注册任务会暂停实际注册操作,进入监控模式,并定期检查账号数量,一旦账号数量低于上限则自动恢复注册。

2.3. 账号使用情况 (Account Usage)

跟踪和管理账号的实际使用量:

  • 查询所有账号使用情况: GET /usage 并发查询并返回所有已存账号的剩余额度和试用天数,结果会进行缓存以提高性能。
  • 查询单个账号使用情况: GET /account/{email}/usage 查询特定邮箱账号的余额和剩余天数,并据此更新数据库中的记录。
  • 更新所有账号使用情况: POST /update_all_usage 批量更新所有账号的余量信息到数据库。
  • 记录账号使用行为: GET /account/{id}/usage-records 获取指定账号的历史使用记录如IP地址、User-Agent、使用时间

2.4. 系统配置管理 (System Configuration)

允许动态管理应用的配置参数(通常存储在 .env 文件中):

  • 读取配置: GET /config 返回当前系统配置信息,如浏览器设置、邮箱服务详情、代理设置等。
  • 更新配置: POST /config 允许通过 API 请求更新 .env 文件中的配置项,并重新加载。

2.5. Cursor 客户端集成 (Cursor Client Integration)

提供与本地安装的 Cursor IDE 进行交互的功能:

  • 使用账号 Token 更新认证: POST /account/use-token/{id} 使用指定账号的 Access Token 来更新本地 Cursor IDE 的认证配置。可以选择是否同时重置机器ID。
  • 重置机器 ID: GET /reset-machine 调用脚本重置本地 Cursor IDE 的机器识别码。

2.6. Web UI 与 API 文档 (Web UI & API Documentation)

  • 静态首页服务: GET / 提供一个简单的 index.html 页面作为应用的 Web UI 入口。
  • Swagger UI: GET /docs 提供交互式的 API 文档界面。
  • ReDoc: GET /redoc 提供另一种风格的 API 文档。

3. 架构与关键组件 (Architecture & Key Components)

3.1. FastAPI 应用实例 (app)

  • 初始化: app = FastAPI(...) 创建主应用实例配置了标题、描述、版本、文档URL以及 lifespan 管理器。
  • 中间件: app.add_middleware(CORSMiddleware, ...) 添加了 CORS 中间件以支持跨域请求。
  • 生命周期事件: @asynccontextmanager async def lifespan(app: FastAPI): ... 定义了应用的生命周期事件。在应用启动时,会调用 init_db() 初始化数据库。

3.2. 数据库交互 (Database Interaction)

  • database.py (外部模块): 此模块(未直接提供,但从导入推断)负责数据库的连接管理 (get_session),定义数据模型 (AccountModel, AccountUsageRecordModel),以及数据库初始化逻辑 (init_db)。
  • SQLAlchemy ORM: 应用通过 SQLAlchemy Core 的查询构造语法(如 select(), delete(), func.count())和异步会话 (async with get_session() as session:) 与数据库进行交互。

3.3. 路由与端点 (Routing & Endpoints)

  • API 端点通过 FastAPI 的装饰器(如 @app.get, @app.post, @app.put, @app.delete)绑定到相应的异步处理函数。
  • 端点通过 tags 参数在 API 文档中进行分组,主要包括: General, Accounts, Registration, Config, System

3.4. 后台注册任务 (run_registration)

  • 这是一个核心的异步函数,通过 asyncio.create_task(run_registration())/registration/start 端点被调用时启动。
  • 任务在一个无限循环中运行(受 registration_status["is_running"] 控制),依次执行:检查当前激活账号数是否小于 MAX_ACCOUNTS,调用 register_account(一个外部同步函数,通过 run_in_executor 异步执行)进行实际注册,处理成功/失败结果,更新统计信息,然后根据 REGISTRATION_INTERVAL 等待下一轮。

3.5. 全局状态管理 (Global State Management)

  • registration_status (字典): 用于实时跟踪和存储自动注册任务的各种状态信息,如是否正在运行 (is_running)、上次运行时间 (last_run)、上次状态 (last_status)、下次计划运行时间 (next_run),以及运行次数、成功和失败的统计。
  • background_tasks (字典): 主要用于存储 run_registration 任务的 asyncio.Task 实例,键为 "registration_task"。这允许其他部分代码检查任务是否正在运行或取消任务。

3.6. 配置管理 (Configuration Management)

  • config.py (外部模块): 定义了应用的一些关键配置常量,如 MAX_ACCOUNTS(最大账号数)、REGISTRATION_INTERVAL(注册间隔时间)、API_HOSTAPI_PORT 等。
  • .env 文件: 应用启动时及配置更新后,会通过 python-dotenv 库的 load_dotenv() 函数从项目根目录下的 .env 文件加载环境变量。这些变量通常包含敏感信息或环境特定配置。

3.7. 日志系统 (Logging)

  • logger.py (外部模块): 应用从该模块导入 infoerror 函数,用于在控制台或日志文件(取决于 logger.py 的配置)中记录不同级别的事件信息和错误详情,包括堆栈跟踪。

3.8. 辅助函数与类 (Utility Functions & Classes)

  • 数据库查询辅助函数: get_active_account_count()get_account_count() 用于高效查询数据库中符合特定条件的账号数量。
  • Cursor 类 (from tokenManager.cursor): 封装了与 Cursor 服务进行交互的逻辑,例如 get_remaining_balance()get_trial_remaining_days() 方法用于查询账号的额度和试用期。
  • CursorAuthManager 类 (from cursor_auth_manager): 负责更新本地 Cursor IDE 的认证文件。
  • CursorShadowPatcher 类 (from cursor_shadow_patcher): 负责重置本地 Cursor IDE 的机器 ID。

4. 数据模型 (Data Models - Pydantic)

Pydantic 模型在 FastAPI 中扮演着数据校验、序列化和文档生成的关键角色:

  • Account: 定义了一个 Cursor 账号的主要属性,如 email, password, token, user, usage_limit, created_at, status, id。它用于创建账号 (POST /account) 的请求体,并在多个响应中作为数据结构。Config.from_attributes = True 允许从 ORM 对象创建 Pydantic 模型实例。
  • AccountResponse: 一个通用的响应模型,封装了操作是否成功 (success)、返回的数据 (data,通常是 Account 模型或其列表)以及可选的消息 (message)。
  • StatusUpdate: 用于 PUT /account/id/{id}/status 端点的请求体,包含一个新的 status 字符串。
  • ConfigModel: 定义了 POST /config 端点接受的配置项及其类型,例如 BROWSER_HEADLESS, MAX_ACCOUNTS, EMAIL_DOMAINS, 代理相关设置等。

这些模型确保了 API 接收的数据符合预期格式,并且响应数据也以结构化的方式返回。

5. 错误处理 (Error Handling)

应用实现了全局异常处理机制:

  • @app.exception_handler(HTTPException): 捕获 FastAPI 自身或其他地方抛出的 HTTPException。它会记录错误并通过 JSONResponse 返回一个包含 success: False 和错误详情(exc.detail)的 JSON 响应,状态码与原始异常一致。
  • @app.exception_handler(Exception): 捕获所有其他未被处理的 Python 异常。这确保了即使发生意外错误,应用也不会崩溃,而是返回一个标准的 500 内部服务器错误响应,其中包含 success: False 和通用错误消息。在调试模式下(app.debug 为 True响应中可能还会包含异常的详细信息。

这种集中的错误处理方式有助于提供一致的 API 错误响应格式。

6. 依赖与环境 (Dependencies & Environment)

主要依赖:

  • FastAPI: Web 框架。
  • Uvicorn: ASGI 服务器。
  • SQLAlchemy: ORM用于数据库异步操作 (需要配合相应的数据库驱动,如 asyncpg for PostgreSQL, aiomysql for MySQL)。
  • Pydantic: 数据验证和模型定义。
  • python-dotenv: 加载 .env 文件中的环境变量。
  • requests: (推断) tokenManager.cursor.Cursor 类可能使用此库进行 HTTP 请求以查询 Cursor API。
  • concurrent.futures: 用于在 check_usage 接口中并发执行账号状态检查。

运行环境:

  • Python: 版本 3.7+ (基于 FastAPI 和 async/await 语法)。
  • .env 文件: 必须在项目根目录下存在,并包含所有必要的配置变量 (如数据库连接信息、API 密钥、邮箱配置、代理配置等)。get_configupdate_config 端点直接与此文件交互。
  • 数据库服务: 需要一个 SQLAlchemy 支持的数据库正在运行,并在 .env 中配置好连接参数。
  • 网络访问: 自动注册和账号使用情况查询功能需要网络访问权限,以连接到 Cursor 服务和可能的邮件服务。

7. 部署与运行 (Deployment & Execution)

该 FastAPI 应用通过 Uvicorn ASGI 服务器运行。文件末尾的 if __name__ == "__main__": 块提供了一个直接运行应用的入口点:

if __name__ == "__main__":
    uvicorn.run(
        "api:app",
        host=API_HOST,
        port=API_PORT,
        reload=API_DEBUG,
        access_log=True,
        log_level="error",
        workers=API_WORKERS,
        loop="asyncio",
    )
  • "api:app": 指示 Uvicorn 加载 api.py 文件中的 app FastAPI 实例。
  • host=API_HOST, port=API_PORT: 从 config.py (或 .env) 加载监听的主机和端口。
  • reload=API_DEBUG: 如果 API_DEBUG 为 True则启用热重载功能代码更改时服务器会自动重启。
  • access_log=True: 启用访问日志。
  • log_level="error": 设置 Uvicorn 的日志级别。
  • workers=API_WORKERS: 配置工作进程数量。对于生产环境,可以根据服务器核心数调整。
  • loop="asyncio": 明确指定使用 asyncio 事件循环。

8. 注意事项 (Considerations)

  • 并发安全: 虽然 FastAPI 和 asyncio 处理并发请求,但对全局变量 registration_statusbackground_tasks 的直接修改可能需要审慎处理,以避免潜在的竞争条件,尤其是在多 worker 配置下(尽管 Python 的 GIL 使得纯 Python 代码的并发问题不如其他语言复杂)。
  • 安全性:
    • 敏感信息: .env 文件中存储了大量敏感配置。需要确保此文件的权限得到妥善管理。
    • 密码存储: 如果 AccountModel 直接存储明文密码,这是严重的安全风险。密码应始终进行哈希处理 (如使用 bcrypt 或 Argon2) 后再存储。
    • API 认证/授权: 当前 API 似乎没有实现任何认证或授权机制来保护其端点。在生产环境中,应考虑添加如 OAuth2 或 API 密钥等机制来限制对敏感操作的访问。
  • 配置热重载: /restart 接口通过修改 .env 文件中的一个时间戳变量来尝试触发 Uvicorn 的热重载。这种方法的有效性依赖于 Uvicorn 的 --reload 选项及其文件监控机制,可能并非在所有情况下都可靠或即时。
  • 外部依赖: 自动注册功能依赖于外部的 register_account 函数和 tokenManager.cursor 模块。这些外部组件的稳定性和行为直接影响本应用的功能。
  • 错误处理细节: 虽然有全局异常处理,但某些函数内部的 try-except 块可能会捕获并记录错误,然后继续执行或返回特定响应,这需要仔细审查以确保所有错误路径都得到妥善处理。
  • 数据库迁移: 随着 AccountModelAccountUsageRecordModel 的演变,需要一个数据库迁移策略 (如使用 Alembic) 来管理数据库模式的变更。