| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- """Extract signkey from 996box env.json and add/update it in .env.
- Run this once per machine to bootstrap credentials. The signkey is
- written to .env (gitignored) and never displayed in chat output.
- """
- import base64
- import json
- import os
- import re
- from pathlib import Path
- ENV_JSON_PATH = Path(r"D:\ProgramFiles\996box\GameBoxDownload\1\env.json")
- ENV_FILE = Path(".env")
- SENSITIVE_LINE_RE = re.compile(r"^CQ2_SIGNKEY=.*$", re.MULTILINE)
- def extract_signkey(path: Path) -> str | None:
- if not path.exists():
- return None
- raw = path.read_bytes()
- text = raw.decode("utf-8", errors="replace")
- for marker in ("MeyJ", "eyJ", "{"):
- idx = text.find(marker)
- if idx < 0:
- continue
- b64 = text[idx:].rstrip()
- try:
- padded = b64 + "=" * (-len(b64) % 4)
- decoded = base64.urlsafe_b64decode(padded)
- obj = json.loads(decoded.decode("utf-8", errors="replace"))
- if isinstance(obj, dict) and "signkey" in obj:
- sk = obj["signkey"]
- if isinstance(sk, str) and sk:
- return sk
- except Exception:
- continue
- return None
- def update_env_file(path: Path, signkey: str) -> None:
- if not path.exists():
- # create minimal .env
- path.write_text(
- f"CQ2_ACCOUNT=\n"
- f"CQ2_PASSWORD=\n"
- f"CQ2_SIGNKEY={signkey}\n"
- f"CQ2_GATE_HOST=jycq-206923.dhsf.xqhuyu.com\n"
- f"CQ2_GATE_PORT=8001\n",
- encoding="utf-8",
- )
- return
- text = path.read_text(encoding="utf-8")
- if SENSITIVE_LINE_RE.search(text):
- text = SENSITIVE_LINE_RE.sub(f"CQ2_SIGNKEY={signkey}", text)
- else:
- text = text.rstrip("\n") + f"\n\n# Extracted from env.json (per-account signkey)\nCQ2_SIGNKEY={signkey}\n"
- path.write_text(text, encoding="utf-8")
- def main() -> int:
- signkey = extract_signkey(ENV_JSON_PATH)
- if signkey is None:
- print(f"error: could not extract signkey from {ENV_JSON_PATH}", flush=True)
- return 1
- print(f"extracted signkey (len={len(signkey)}) from {ENV_JSON_PATH}", flush=True)
- update_env_file(ENV_FILE, signkey)
- print(f"updated {ENV_FILE.resolve()}", flush=True)
- print(f"signkey not displayed (written to .env only)", flush=True)
- return 0
- if __name__ == "__main__":
- import sys
- sys.exit(main())
|