import asyncio import json import random from fastapi import HTTPException import utils.configs as configs import utils.globals as globals from chatgpt.refreshToken import rt2ac from utils.Logger import logger def get_req_token(req_token, seed=None): if configs.auto_seed: available_token_list = list(set(globals.token_list) - set(globals.error_token_list)) length = len(available_token_list) if seed and length > 0: if seed not in globals.seed_map.keys(): globals.seed_map[seed] = {"token": random.choice(available_token_list), "conversations": []} with open(globals.SEED_MAP_FILE, "w") as f: json.dump(globals.seed_map, f, indent=4) else: req_token = globals.seed_map[seed]["token"] return req_token if req_token in configs.authorization_list: if len(available_token_list) > 0: if configs.random_token: req_token = random.choice(available_token_list) return req_token else: globals.count += 1 globals.count %= length return available_token_list[globals.count] else: return None else: return req_token else: seed = req_token if seed not in globals.seed_map.keys(): raise HTTPException(status_code=401, detail={"error": "Invalid Seed"}) return globals.seed_map[seed]["token"] async def verify_token(req_token): if not req_token: if configs.authorization_list: logger.error("Unauthorized with empty token.") raise HTTPException(status_code=401) else: return None else: if req_token.startswith("eyJhbGciOi") or req_token.startswith("fk-"): access_token = req_token return access_token elif len(req_token) == 45: try: if req_token in globals.error_token_list: raise HTTPException(status_code=401, detail="Error RefreshToken") access_token = await rt2ac(req_token, force_refresh=False) return access_token except HTTPException as e: raise HTTPException(status_code=e.status_code, detail=e.detail) else: return req_token async def refresh_all_tokens(force_refresh=False): for token in list(set(globals.token_list) - set(globals.error_token_list)): if len(token) == 45: try: await asyncio.sleep(0.5) await rt2ac(token, force_refresh=force_refresh) except HTTPException: pass logger.info("All tokens refreshed.")