mirror of
https://github.com/lanqian528/chat2api.git
synced 2026-06-13 21:02:46 +08:00
v1.6.4-beta4 fix bugs
This commit is contained in:
parent
460fd62bab
commit
9117819ebe
169
gateway/share.py
169
gateway/share.py
@ -13,7 +13,7 @@ from chatgpt.proofofWork import get_config, get_requirements_token, get_answer_t
|
||||
from gateway.reverseProxy import get_real_req_token, content_generator
|
||||
from utils.Client import Client
|
||||
from utils.Logger import logger
|
||||
from utils.config import proxy_url_list, chatgpt_base_url_list, turnstile_solver_url, x_sign
|
||||
from utils.config import proxy_url_list, chatgpt_base_url_list, turnstile_solver_url, x_sign, no_sentinel
|
||||
|
||||
base_headers = {
|
||||
'accept': '*/*',
|
||||
@ -68,8 +68,8 @@ async def chatgpt_account_check(access_token):
|
||||
else:
|
||||
is_deactivated = False
|
||||
|
||||
if this_plan_type == "chatgptteamplan":
|
||||
plan_type = "chatgptteamplan"
|
||||
if "team" in this_plan_type:
|
||||
plan_type = this_plan_type
|
||||
team_ids.append(account)
|
||||
elif plan_type is None:
|
||||
plan_type = this_plan_type
|
||||
@ -113,101 +113,100 @@ async def chatgpt_refresh(refresh_token):
|
||||
await client.close()
|
||||
|
||||
|
||||
@app.post("/auth/refresh")
|
||||
async def refresh(request: Request):
|
||||
auth_info = {}
|
||||
form_data = await request.form()
|
||||
if no_sentinel:
|
||||
@app.post("/auth/refresh")
|
||||
async def refresh(request: Request):
|
||||
auth_info = {}
|
||||
form_data = await request.form()
|
||||
|
||||
auth_info.update(form_data)
|
||||
auth_info.update(form_data)
|
||||
|
||||
access_token = auth_info.get("access_token", auth_info.get("accessToken", ""))
|
||||
refresh_token = auth_info.get("refresh_token", "")
|
||||
access_token = auth_info.get("access_token", auth_info.get("accessToken", ""))
|
||||
refresh_token = auth_info.get("refresh_token", "")
|
||||
|
||||
if not refresh_token and not access_token:
|
||||
raise HTTPException(status_code=401, detail="refresh_token or access_token is required")
|
||||
if not refresh_token and not access_token:
|
||||
raise HTTPException(status_code=401, detail="refresh_token or access_token is required")
|
||||
|
||||
if access_token:
|
||||
account_check_info = await chatgpt_account_check(access_token)
|
||||
if account_check_info:
|
||||
auth_info.update(account_check_info)
|
||||
auth_info.update({"accessToken": access_token})
|
||||
return Response(content=json.dumps(auth_info), media_type="application/json")
|
||||
|
||||
if refresh_token:
|
||||
chatgpt_refresh_info = await chatgpt_refresh(refresh_token)
|
||||
if chatgpt_refresh_info:
|
||||
auth_info.update(chatgpt_refresh_info)
|
||||
access_token = auth_info.get("accessToken", "")
|
||||
if access_token:
|
||||
account_check_info = await chatgpt_account_check(access_token)
|
||||
if account_check_info:
|
||||
auth_info.update(account_check_info)
|
||||
auth_info.update({"accessToken": access_token})
|
||||
return Response(content=json.dumps(auth_info), media_type="application/json")
|
||||
raise HTTPException(status_code=401, detail="Unauthorized")
|
||||
|
||||
if refresh_token:
|
||||
chatgpt_refresh_info = await chatgpt_refresh(refresh_token)
|
||||
if chatgpt_refresh_info:
|
||||
auth_info.update(chatgpt_refresh_info)
|
||||
access_token = auth_info.get("accessToken", "")
|
||||
account_check_info = await chatgpt_account_check(access_token)
|
||||
if account_check_info:
|
||||
auth_info.update(account_check_info)
|
||||
auth_info.update({"accessToken": access_token})
|
||||
return Response(content=json.dumps(auth_info), media_type="application/json")
|
||||
raise HTTPException(status_code=401, detail="Unauthorized")
|
||||
|
||||
|
||||
@app.post("/backend-api/conversation")
|
||||
async def chat_conversations(request: Request):
|
||||
token = request.headers.get("Authorization", "").replace("Bearer ", "")
|
||||
req_token = await get_real_req_token(token)
|
||||
access_token = await verify_token(req_token)
|
||||
ua = get_ua(req_token)
|
||||
user_agent = ua.get("user-agent", "")
|
||||
proxy_url = random.choice(proxy_url_list) if proxy_url_list else None
|
||||
host_url = random.choice(chatgpt_base_url_list) if chatgpt_base_url_list else "https://chatgpt.com"
|
||||
proof_token = None
|
||||
turnstile_token = None
|
||||
@app.post("/backend-api/conversation")
|
||||
async def chat_conversations(request: Request):
|
||||
token = request.headers.get("Authorization", "").replace("Bearer ", "")
|
||||
req_token = await get_real_req_token(token)
|
||||
access_token = await verify_token(req_token)
|
||||
ua = get_ua(req_token)
|
||||
user_agent = ua.get("user-agent", "")
|
||||
proxy_url = random.choice(proxy_url_list) if proxy_url_list else None
|
||||
host_url = random.choice(chatgpt_base_url_list) if chatgpt_base_url_list else "https://chatgpt.com"
|
||||
proof_token = None
|
||||
turnstile_token = None
|
||||
|
||||
headers = base_headers.copy()
|
||||
headers.update(ua)
|
||||
headers.update({"authorization": f"Bearer {access_token}"})
|
||||
headers = base_headers.copy()
|
||||
headers.update(ua)
|
||||
headers.update({"authorization": f"Bearer {access_token}"})
|
||||
|
||||
client = Client(proxy=proxy_url, impersonate=ua.get("impersonate", "safari15_3"))
|
||||
client = Client(proxy=proxy_url, impersonate=ua.get("impersonate", "safari15_3"))
|
||||
|
||||
config = get_config(user_agent)
|
||||
p = get_requirements_token(config)
|
||||
data = {'p': p}
|
||||
r = await client.post(f'{host_url}/backend-api/sentinel/chat-requirements', headers=headers, json=data, timeout=10)
|
||||
resp = r.json()
|
||||
turnstile = resp.get('turnstile', {})
|
||||
turnstile_required = turnstile.get('required')
|
||||
if turnstile_required:
|
||||
turnstile_dx = turnstile.get("dx")
|
||||
try:
|
||||
if turnstile_solver_url:
|
||||
res = await client.post(
|
||||
turnstile_solver_url, json={"url": "https://chatgpt.com", "p": p, "dx": turnstile_dx}
|
||||
)
|
||||
turnstile_token = res.json().get("t")
|
||||
except Exception as e:
|
||||
logger.info(f"Turnstile ignored: {e}")
|
||||
config = get_config(user_agent)
|
||||
p = get_requirements_token(config)
|
||||
data = {'p': p}
|
||||
r = await client.post(f'{host_url}/backend-api/sentinel/chat-requirements', headers=headers, json=data, timeout=10)
|
||||
resp = r.json()
|
||||
turnstile = resp.get('turnstile', {})
|
||||
turnstile_required = turnstile.get('required')
|
||||
if turnstile_required:
|
||||
turnstile_dx = turnstile.get("dx")
|
||||
try:
|
||||
if turnstile_solver_url:
|
||||
res = await client.post(turnstile_solver_url, json={"url": "https://chatgpt.com", "p": p, "dx": turnstile_dx})
|
||||
turnstile_token = res.json().get("t")
|
||||
except Exception as e:
|
||||
logger.info(f"Turnstile ignored: {e}")
|
||||
|
||||
proofofwork = resp.get('proofofwork', {})
|
||||
proofofwork_required = proofofwork.get('required')
|
||||
if proofofwork_required:
|
||||
proofofwork_diff = proofofwork.get("difficulty")
|
||||
proofofwork_seed = proofofwork.get("seed")
|
||||
proof_token, solved = await run_in_threadpool(
|
||||
get_answer_token, proofofwork_seed, proofofwork_diff, config
|
||||
)
|
||||
if not solved:
|
||||
raise HTTPException(status_code=403, detail="Failed to solve proof of work")
|
||||
chat_token = resp.get('token')
|
||||
headers.update({
|
||||
"openai-sentinel-chat-requirements-token": chat_token,
|
||||
"openai-sentinel-proof-token": proof_token,
|
||||
"openai-sentinel-turnstile-token": turnstile_token,
|
||||
})
|
||||
proofofwork = resp.get('proofofwork', {})
|
||||
proofofwork_required = proofofwork.get('required')
|
||||
if proofofwork_required:
|
||||
proofofwork_diff = proofofwork.get("difficulty")
|
||||
proofofwork_seed = proofofwork.get("seed")
|
||||
proof_token, solved = await run_in_threadpool(
|
||||
get_answer_token, proofofwork_seed, proofofwork_diff, config
|
||||
)
|
||||
if not solved:
|
||||
raise HTTPException(status_code=403, detail="Failed to solve proof of work")
|
||||
chat_token = resp.get('token')
|
||||
headers.update({
|
||||
"openai-sentinel-chat-requirements-token": chat_token,
|
||||
"openai-sentinel-proof-token": proof_token,
|
||||
"openai-sentinel-turnstile-token": turnstile_token,
|
||||
})
|
||||
|
||||
params = dict(request.query_params)
|
||||
data = await request.body()
|
||||
request_cookies = dict(request.cookies)
|
||||
background = BackgroundTask(client.close)
|
||||
r = await client.post_stream(f"{host_url}/backend-api/conversation", params=params, headers=headers, cookies=request_cookies, data=data, stream=True, allow_redirects=False)
|
||||
rheaders = r.headers
|
||||
if x_sign:
|
||||
rheaders.update({"x-sign": x_sign})
|
||||
if 'stream' in rheaders.get("content-type", ""):
|
||||
return StreamingResponse(content_generator(r, token), headers=rheaders, media_type=rheaders.get("content-type"), background=background)
|
||||
else:
|
||||
return Response(content=(await r.atext()), headers=rheaders, media_type=rheaders.get("content-type"), status_code=r.status_code, background=background)
|
||||
params = dict(request.query_params)
|
||||
data = await request.body()
|
||||
request_cookies = dict(request.cookies)
|
||||
background = BackgroundTask(client.close)
|
||||
r = await client.post_stream(f"{host_url}/backend-api/conversation", params=params, headers=headers, cookies=request_cookies, data=data, stream=True, allow_redirects=False)
|
||||
rheaders = r.headers
|
||||
if x_sign:
|
||||
rheaders.update({"x-sign": x_sign})
|
||||
if 'stream' in rheaders.get("content-type", ""):
|
||||
return StreamingResponse(content_generator(r, token), headers=rheaders, media_type=rheaders.get("content-type"), background=background)
|
||||
else:
|
||||
return Response(content=(await r.atext()), headers=rheaders, media_type=rheaders.get("content-type"), status_code=r.status_code, background=background)
|
||||
|
||||
@ -38,7 +38,6 @@ turnstile_solver_url = os.getenv('TURNSTILE_SOLVER_URL', None)
|
||||
history_disabled = is_true(os.getenv('HISTORY_DISABLED', True))
|
||||
pow_difficulty = os.getenv('POW_DIFFICULTY', '000032')
|
||||
retry_times = int(os.getenv('RETRY_TIMES', 3))
|
||||
enable_gateway = is_true(os.getenv('ENABLE_GATEWAY', False))
|
||||
conversation_only = is_true(os.getenv('CONVERSATION_ONLY', False))
|
||||
enable_limit = is_true(os.getenv('ENABLE_LIMIT', True))
|
||||
upload_by_url = is_true(os.getenv('UPLOAD_BY_URL', False))
|
||||
@ -51,6 +50,9 @@ chatgpt_base_url_list = chatgpt_base_url.split(',') if chatgpt_base_url else []
|
||||
ark0se_token_url_list = ark0se_token_url.split(',') if ark0se_token_url else []
|
||||
proxy_url_list = proxy_url.split(',') if proxy_url else []
|
||||
|
||||
enable_gateway = is_true(os.getenv('ENABLE_GATEWAY', False))
|
||||
no_sentinel = is_true(os.getenv('NO_SENTINEL', False))
|
||||
|
||||
with open('version.txt') as f:
|
||||
version = f.read().strip()
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
1.6.4-beta2
|
||||
1.6.4-beta4
|
||||
Loading…
Reference in New Issue
Block a user