From 9947ea163941cc9be8801adea47039fb6b589031 Mon Sep 17 00:00:00 2001 From: CRT Date: Fri, 23 Oct 2026 23:17:05 +0800 Subject: [PATCH] dev channel VDS publisher: send a User-Agent (Cloudflare refuses urllib's default with 403) --- tools/vds/storebound-desktop-dev | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/vds/storebound-desktop-dev b/tools/vds/storebound-desktop-dev index 6b8cbbb..463eb7f 100644 --- a/tools/vds/storebound-desktop-dev +++ b/tools/vds/storebound-desktop-dev @@ -38,8 +38,13 @@ def key(v): return tuple(int(x) for x in m.groups()) if m else None +def headers(): + # Cloudflare refuses urllib's default User-Agent (403) + return {"Authorization": f"token {open(TOKEN).read().strip()}", "User-Agent": "storebound-desktop-dev"} + + def get(url, binary=False): - req = urllib.request.Request(url, headers={"Authorization": f"token {open(TOKEN).read().strip()}"}) + req = urllib.request.Request(url, headers=headers()) with urllib.request.urlopen(req, timeout=60) as r: return r.read() if binary else json.loads(r.read()) @@ -102,7 +107,7 @@ def publish(rel, v): assert SAFE.match(dest) and name in sums, name p = f"{inc}/{dest}" log(f"{v}: fetching {name}") - req = urllib.request.Request(f"{FORGEJO}/attachments/{assets[name]['uuid']}", headers={"Authorization": f"token {open(TOKEN).read().strip()}"}) + req = urllib.request.Request(f"{FORGEJO}/attachments/{assets[name]['uuid']}", headers=headers()) with urllib.request.urlopen(req, timeout=900) as r, open(p, "wb") as f: shutil.copyfileobj(r, f, 1 << 20) h = sha256(p)