welp, couldn't fool the server

This commit is contained in:
Mathieu Broillet 2025-08-28 18:46:47 +02:00
parent 5f931ad8b3
commit 0ca1a76c4e
Signed by: mathieub
GPG Key ID: 4428608CDA3A98D3
2 changed files with 15 additions and 21 deletions

View File

@ -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

View File

@ -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,