chatgpt2api / api /register.py
tx1538's picture
Upload 179 files
9d7ddb9 verified
Raw
History Blame
2.56 kB
from __future__ import annotations
import asyncio
import json
from fastapi import APIRouter, Header
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
from api.support import require_admin
from services.register_service import register_service
class RegisterConfigRequest(BaseModel):
mail: dict | None = None
hero_sms: dict | None = None
proxy: str | None = None
total: int | None = None
threads: int | None = None
mode: str | None = None
target_quota: int | None = None
target_available: int | None = None
check_interval: int | None = None
def create_router() -> APIRouter:
router = APIRouter()
@router.get("/api/register")
async def get_register_config(authorization: str | None = Header(default=None)):
require_admin(authorization)
return {"register": register_service.get()}
@router.post("/api/register")
async def update_register_config(body: RegisterConfigRequest, authorization: str | None = Header(default=None)):
require_admin(authorization)
return {"register": register_service.update(body.model_dump(exclude_none=True))}
@router.post("/api/register/start")
async def start_register(authorization: str | None = Header(default=None)):
require_admin(authorization)
return {"register": register_service.start()}
@router.post("/api/register/codex/start")
async def start_codex_register(authorization: str | None = Header(default=None)):
require_admin(authorization)
return {"register": register_service.start_codex()}
@router.post("/api/register/stop")
async def stop_register(authorization: str | None = Header(default=None)):
require_admin(authorization)
return {"register": register_service.stop()}
@router.post("/api/register/reset")
async def reset_register(authorization: str | None = Header(default=None)):
require_admin(authorization)
return {"register": register_service.reset()}
@router.get("/api/register/events")
async def register_events(token: str = ""):
require_admin(f"Bearer {token}")
async def stream():
last = ""
while True:
payload = json.dumps(register_service.get(), ensure_ascii=False)
if payload != last:
last = payload
yield f"data: {payload}\n\n"
await asyncio.sleep(0.5)
return StreamingResponse(stream(), media_type="text/event-stream")
return router