chat2api/chatgpt/authorization.py
LanQian 00f7cbdda0
Some checks are pending
Build Docker Image / main (push) Waiting to run
v1.3.0 add error refreshToken
2024-06-17 10:33:44 +08:00

56 lines
1.7 KiB
Python

import asyncio
from fastapi import HTTPException
from chatgpt.refreshToken import rt2ac
from utils.Logger import logger
from utils.config import authorization_list
import chatgpt.globals as globals
def get_req_token(req_token):
if req_token in authorization_list:
if globals.token_list:
globals.count += 1
globals.count %= len(globals.token_list)
while globals.token_list[globals.count] in globals.error_token_list:
globals.count += 1
globals.count %= len(globals.token_list)
return globals.token_list[globals.count]
else:
return None
else:
return req_token
async def verify_token(req_token):
if not req_token:
if 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:
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 globals.token_list:
if len(token) == 45:
try:
await asyncio.sleep(2)
await rt2ac(token, force_refresh=force_refresh)
except HTTPException:
pass
logger.info("All tokens refreshed.")