cca / chatgpt /authorization.py
sanbo
update sth. at 2025-01-20 14:08:58
08ca036
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.")