From 0ca1a76c4e997ccbc9ea56f4c0bd48b8e7e6bfd6 Mon Sep 17 00:00:00 2001 From: Mathieu Broillet Date: Thu, 28 Aug 2025 18:46:47 +0200 Subject: [PATCH] welp, couldn't fool the server --- main_app.py | 8 ++++---- utils.py | 28 +++++++++++----------------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/main_app.py b/main_app.py index f728656..ad0427a 100644 --- a/main_app.py +++ b/main_app.py @@ -23,8 +23,8 @@ async def fake_get_home(request: Request, _=host_required([Hosts.CLIENTS])): return await return_edited_response(upstream_response, data_override) -@app.get("/api/v2/features", tags=[Hosts.CLIENTS.value]) -async def fake_get_features(request: Request, _=host_required([Hosts.CLIENTS])): +@app.get("/api/v2/features", tags=[Hosts.CLIENTS.value, Hosts.PLEX.value]) +async def fake_get_features(request: Request, _=host_required([Hosts.CLIENTS, Hosts.PLEX])): upstream_response = await call_official(request, request.url.path.lstrip("/")) data_override = FEATURES_DICT @@ -32,8 +32,8 @@ async def fake_get_features(request: Request, _=host_required([Hosts.CLIENTS])): return await return_edited_response(upstream_response, data_override) -@app.get("/api/v2/user", tags=[Hosts.CLIENTS.value]) -async def fake_get_user(request: Request, _=host_required([Hosts.CLIENTS])): +@app.get("/api/v2/user", tags=[Hosts.CLIENTS.value, Hosts.PLEX.value]) +async def fake_get_user(request: Request, _=host_required([Hosts.CLIENTS, Hosts.PLEX])): upstream_response = await call_official(request, request.url.path.lstrip("/")) data_override = None diff --git a/utils.py b/utils.py index 98a1f40..3a7cf8d 100644 --- a/utils.py +++ b/utils.py @@ -1,3 +1,5 @@ +import json + import httpx from fastapi import Request, Depends, HTTPException from fastapi.responses import Response @@ -49,6 +51,7 @@ async def call_official(request: Request, path: str) -> httpx.Response: headers=req_headers, content=body, params=request.query_params, + follow_redirects=True, cookies=request.cookies, ) @@ -60,23 +63,6 @@ async def call_official(request: Request, path: str) -> httpx.Response: } upstream_response.headers = resp_headers - if LOG_REQUESTS: - with open(LOG_FILE, "a", encoding="utf-8") as f: - f.write(f"{request.method} {request.url}\n") - f.write(f"Request headers: {req_headers}\n") - if body: - try: - f.write(f"Request body: {body.decode('utf-8')}\n") - except UnicodeDecodeError: - f.write(f"Request body: {body}\n") - f.write(f"Response status: {upstream_response.status_code}\n") - f.write(f"Response headers: {resp_headers}\n") - try: - f.write(f"Response body: {upstream_response.text}\n") - except UnicodeDecodeError: - f.write(f"Response body: {upstream_response.content}\n") - f.write("\n---\n\n") - return upstream_response @@ -105,6 +91,14 @@ async def return_edited_response( if (isinstance(data, list) or ignore_official_data) and isinstance(new_content, list): data = new_content # replace entire list + if LOG_REQUESTS: + with open(LOG_FILE, "a", encoding="utf-8") as f: + beautify_headers = json.dumps(dict(response.headers), indent=2) + beautify_request_headers = json.dumps(dict(response.request.headers), indent=2) + beautify_data = json.dumps(data, indent=2, ensure_ascii=False) + f.write(f"---\n{response.status_code} {response.url}\n\nRequest Headers: {beautify_request_headers}\n\n" + f"Response Headers: {beautify_headers}\n\nResponse Data: {beautify_data}\n\n\n\n") + return JSONResponse( content=data, status_code=response.status_code,