#!/usr/bin/env python3 """Download the vulnerable (0.37.3) and patched (0.37.4) PocketBase binaries for the current OS/arch into ./bin_/. Cross-platform, stdlib only.""" import os, sys, platform, zipfile, urllib.request VERSIONS = ["0.37.3", "0.37.4"] HERE = os.path.dirname(os.path.abspath(__file__)) def asset_os(): s = sys.platform if s.startswith("win"): return "windows" if s == "darwin": return "darwin" return "linux" def asset_arch(): m = platform.machine().lower() if m in ("x86_64", "amd64"): return "amd64" if m in ("arm64", "aarch64"): return "arm64" return "amd64" def main(): o, a = asset_os(), asset_arch() for v in VERSIONS: name = f"pocketbase_{v}_{o}_{a}.zip" url = f"https://github.com/pocketbase/pocketbase/releases/download/v{v}/{name}" zip_path = os.path.join(HERE, f"pb_{v}.zip") out_dir = os.path.join(HERE, f"bin_{v}") print(f"[*] {v}: downloading {url}") urllib.request.urlretrieve(url, zip_path) with zipfile.ZipFile(zip_path) as z: z.extractall(out_dir) exe = os.path.join(out_dir, "pocketbase.exe" if o == "windows" else "pocketbase") if o != "windows": os.chmod(exe, 0o755) os.remove(zip_path) print(f"[+] {v}: ready at {exe}") if __name__ == "__main__": main()