c2a / chatgpt /authorization.py
deeme's picture
Upload 39 files
1271bf4 verified
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.")