- git mv of all existing files into version-python/ (history preserved) - version-rust/: minimal cargo scaffold (edition 2024), no deps yet - root AGENTS.md documents the transition rules and artifact/schema contract - main is untouched; the python layout there stays as-is
69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""One-off diagnostic: inspect the raw gofile API response for one content id.
|
|
|
|
Prints everything except the account token. Creates exactly one guest account.
|
|
"""
|
|
|
|
import hashlib
|
|
import json
|
|
import sys
|
|
import time
|
|
|
|
import requests
|
|
|
|
CID = sys.argv[1]
|
|
|
|
USER_AGENT = "Mozilla/5.0"
|
|
LOCALE = "en-US"
|
|
TOKEN_SECRET = "12af056dacea0b"
|
|
WINDOW_SEC = 14400
|
|
COMMON = {"User-Agent": USER_AGENT, "Accept-Encoding": "gzip", "Accept": "*/*",
|
|
"Connection": "keep-alive"}
|
|
|
|
resp = requests.post("https://api.gofile.io/accounts", headers=COMMON, timeout=15)
|
|
data = resp.json()
|
|
assert data.get("status") == "ok", data
|
|
token = data["data"]["token"]
|
|
|
|
window = int(time.time()) // WINDOW_SEC
|
|
seed = f"{USER_AGENT}::{LOCALE}::{token}::{window}::{TOKEN_SECRET}"
|
|
wtoken = hashlib.sha256(seed.encode()).hexdigest()
|
|
headers = {
|
|
**COMMON,
|
|
"Authorization": f"Bearer {token}",
|
|
"X-Website-Token": wtoken,
|
|
"X-BL": LOCALE,
|
|
}
|
|
|
|
r = requests.get(
|
|
f"https://api.gofile.io/contents/{CID}?cache=true&sortField=createTime&sortDirection=1",
|
|
headers=headers, timeout=30,
|
|
)
|
|
print("HTTP", r.status_code)
|
|
body = r.json()
|
|
print("api status:", body.get("status"))
|
|
|
|
|
|
def scrub(node):
|
|
"""Remove anything token-like from the tree before printing."""
|
|
if isinstance(node, dict):
|
|
return {
|
|
k: ("<redacted>" if k in ("token", "accountToken") else scrub(v))
|
|
for k, v in node.items()
|
|
}
|
|
if isinstance(node, list):
|
|
return [scrub(x) for x in node]
|
|
return node
|
|
|
|
|
|
d = body.get("data") or {}
|
|
print("data keys:", sorted(d.keys()))
|
|
print("type:", d.get("type"))
|
|
children = d.get("children") or {}
|
|
print("children count:", len(children))
|
|
for cid, child in list(children.items())[:5]:
|
|
print(" child:", cid, "type:", child.get("type"), "name:", child.get("name"),
|
|
"has link:", "link" in child)
|
|
print()
|
|
print(json.dumps(scrub(body), indent=2)[:3000])
|