| 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 "" | |
| 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.") | |