v1.5.5 use rt and at

This commit is contained in:
lanqian528 2024-10-26 02:06:22 +08:00
parent fb0e13b417
commit 2388d437cc
7 changed files with 48 additions and 23 deletions

View File

@ -37,7 +37,7 @@ jobs:
images: lanqian528/chat2api
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=raw,value=v1.5.4
type=raw,value=v1.5.5
- name: Build and push
uses: docker/build-push-action@v5

View File

@ -28,7 +28,7 @@
## 功能
### 最新版 v1.5.4
### 最新版 v1.5.5
> 已完成
> - [x] 流式、非流式传输

View File

@ -11,7 +11,7 @@ from fastapi.responses import StreamingResponse, JSONResponse
from fastapi.security import OAuth2PasswordBearer
from fastapi.templating import Jinja2Templates
from starlette.background import BackgroundTask
from starlette.responses import RedirectResponse
from starlette.responses import RedirectResponse, Response
from chatgpt.ChatService import ChatService
from chatgpt.authorization import refresh_all_tokens, verify_token, get_req_token
@ -135,25 +135,32 @@ async def chatgpt(request: Request):
if not enable_gateway:
raise HTTPException(status_code=404, detail="Gateway is disabled")
seed_token = request.query_params.get("seed", None)
seed_token = request.query_params.get("seed")
if not seed_token:
seed_token = request.cookies.get("seed_token")
if not seed_token:
seed_token = str(int(time.time()))
req_token = get_req_token(seed_token)
seed_token = await verify_token(req_token)
response = templates.TemplateResponse("chatgpt.html", {"request": request, "seed_token": seed_token})
# response.set_cookie("req_token", value=req_token)
# response.set_cookie("access_token", value=access_token)
response = templates.TemplateResponse("chatgpt.html", {"request": request, "access_token": seed_token})
response.set_cookie("seed_token", value=seed_token)
return response
@app.get("/backend-api/gizmos/bootstrap")
async def get_gizmos_bootstrap():
return {"gizmos": []}
# @app.get("/backend-api/conversations")
# async def get_conversations():
# return {"items": [], "total": 0, "limit": 28, "offset": 0, "has_missing_conversations": False}
@app.get("/backend-api/gizmos/bootstrap")
async def get_gizmos_bootstrap():
return {"gizmos": []}
@app.patch("/backend-api/conversations")
async def get_conversations():
return {"success": True, "message": None}
@app.get("/backend-api/me")
@ -200,12 +207,19 @@ async def get_me():
}
banned_paths = ["backend-api/accounts/logout_all", "backend-api/accounts/deactivate", "backend-api/user_system_messages"]
redirect_paths = ["auth/logout", "c/"]
@app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH", "TRACE"])
async def reverse_proxy(request: Request, path: str):
if path.startswith("c/"):
seed_token = request.cookies.get("seed_token")
if not seed_token:
seed_token = str(int(time.time()))
redirect_url = str(request.base_url) + "?seed=" + seed_token
return RedirectResponse(url=redirect_url, status_code=302)
for banned_path in banned_paths:
if banned_path in path:
return Response(status_code=404)
for redirect_path in redirect_paths:
if redirect_path in path:
redirect_url = str(request.base_url)
return RedirectResponse(url=redirect_url, status_code=302)
return await chatgpt_reverse_proxy(request, path)

View File

@ -1,13 +1,17 @@
import asyncio
import os
import random
from fastapi import HTTPException
import ua_generator
from fastapi import HTTPException
import chatgpt.globals as globals
from chatgpt.refreshToken import rt2ac
from utils.Logger import logger
from utils.config import authorization_list, random_token
import chatgpt.globals as globals
os.environ['PYTHONHASHSEED'] = '0'
random.seed(0)
def get_req_token(req_token, seed=None):

View File

@ -104,11 +104,18 @@ async def chatgpt_reverse_proxy(request: Request, path: str):
"sec-fetch-site": "same-origin",
})
seed_token = headers.get("authorization", None)
seed_token = headers.get("authorization", "").replace("Bearer ", "")
if seed_token:
req_token = get_req_token(None, seed_token)
req_token = get_req_token(seed_token)
access_token = await verify_token(req_token)
headers.update({"authorization": access_token})
if access_token.startswith("eyJhbGciOi"):
headers.update({"authorization": access_token})
else:
req_token = get_req_token(None, seed_token)
access_token = await verify_token(req_token)
headers.update({"authorization": access_token})
else:
headers.pop("authorization", None)
data = await request.body()

View File

@ -4309,7 +4309,7 @@
"queryKey": ["session"],
"state": {
"data": {
"accessToken": "{{ seed_token }}",
"accessToken": "{{ access_token }}",
"authProvider": "login-web",
"user": {}
},

View File

@ -52,7 +52,7 @@ proxy_url_list = proxy_url.split(',') if proxy_url else []
user_agents_list = ast.literal_eval(user_agents)
logger.info("-" * 60)
logger.info("Chat2Api 1.5.4 | https://github.com/lanqian528/chat2api")
logger.info("Chat2Api 1.5.5 | https://github.com/lanqian528/chat2api")
logger.info("-" * 60)
logger.info("Environment variables:")
logger.info("API_PREFIX: " + str(api_prefix))