diff --git a/gateway/backend.py b/gateway/backend.py index 30be77d..5415a79 100644 --- a/gateway/backend.py +++ b/gateway/backend.py @@ -22,6 +22,7 @@ from utils.configs import x_sign, turnstile_solver_url, chatgpt_base_url_list, n banned_paths = [ "backend-api/accounts/logout_all", "backend-api/accounts/deactivate", + "backend-api/payments/checkout" "backend-api/user_system_messages", "backend-api/memories", "backend-api/settings/clear_account_user_memory", @@ -61,15 +62,42 @@ async def get_gizmos_bootstrap(request: Request): return {"gizmos": []} -@app.get("/backend-api/conversations") +@app.get("/backend-api/gizmos/pinned") +async def get_gizmos_pinned(request: Request): + token = request.headers.get("Authorization", "").replace("Bearer ", "") + if len(token) == 45 or token.startswith("eyJhbGciOi"): + return await chatgpt_reverse_proxy(request, "backend-api/gizmos/pinned") + else: + return {"items": [], "cursor": None} + + +@app.get("/public-api/gizmos/discovery/recent") +async def get_gizmos_discovery_recent(request: Request): + token = request.headers.get("Authorization", "").replace("Bearer ", "") + if len(token) == 45 or token.startswith("eyJhbGciOi"): + return await chatgpt_reverse_proxy(request, "public-api/gizmos/discovery/recent") + else: + return { + "info": { + "id": "recent", + "title": "Recently Used", + }, + "list": { + "items": [], + "cursor": None + } + } + + +@app.api_route("/backend-api/conversations", methods=["GET", "PATCH"]) async def get_conversations(request: Request): - limit = int(request.query_params.get("limit", 28)) - offset = int(request.query_params.get("offset", 0)) - is_archived = request.query_params.get("is_archived", None) token = request.headers.get("Authorization", "").replace("Bearer ", "") if len(token) == 45 or token.startswith("eyJhbGciOi"): return await chatgpt_reverse_proxy(request, "backend-api/conversations") - else: + if request.method == "GET": + limit = int(request.query_params.get("limit", 28)) + offset = int(request.query_params.get("offset", 0)) + is_archived = request.query_params.get("is_archived", None) items = [] for conversation_id in globals.seed_map.get(token, {}).get("conversations", []): conversation = globals.conversation_map.get(conversation_id, None) @@ -89,6 +117,8 @@ async def get_conversations(request: Request): "has_missing_conversations": False } return Response(content=json.dumps(conversations, indent=4), media_type="application/json") + else: + raise HTTPException(status_code=403, detail="Forbidden") @app.get("/backend-api/conversation/{conversation_id}") diff --git a/gateway/chatgpt.py b/gateway/chatgpt.py index ca5fd06..8ed9afd 100644 --- a/gateway/chatgpt.py +++ b/gateway/chatgpt.py @@ -1,4 +1,5 @@ import json +from urllib.parse import quote from fastapi import Request from fastapi.responses import HTMLResponse @@ -19,6 +20,9 @@ async def chatgpt_html(request: Request): if not token: return await login_html(request) + if len(token) != 45 and not token.startswith("eyJhbGciOi"): + token = quote(token) + user_remix_context = chatgpt_context.copy() set_value_for_key(user_remix_context, "user", {"id": "user-chatgpt"}) set_value_for_key(user_remix_context, "accessToken", token) diff --git a/templates/chatgpt.html b/templates/chatgpt.html index 92eed68..b231685 100644 --- a/templates/chatgpt.html +++ b/templates/chatgpt.html @@ -1,5 +1,5 @@ - +
@@ -18,55 +18,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + -