#!/usr/bin/env python3 """Point trial/alogin dst at hotspot GW IP, not otantik.net. Updates RB2011 and RB4011.""" from __future__ import annotations import re import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent)) import paramiko from mk_nko_wg_exec import JUMP, connect_mk as nko_connect def hub_connect(): jump = paramiko.SSHClient() jump.set_missing_host_key_policy(paramiko.AutoAddPolicy()) jump.connect( JUMP[0], username=JUMP[1], password=JUMP[2], timeout=25, banner_timeout=30, allow_agent=False, look_for_keys=False, ) chan = jump.get_transport().open_channel("direct-tcpip", ("10.88.0.6", 22), ("127.0.0.1", 0)) mk = paramiko.SSHClient() mk.set_missing_host_key_policy(paramiko.AutoAddPolicy()) mk.connect( "10.88.0.6", username="admin", password="", sock=chan, timeout=25, banner_timeout=30, allow_agent=False, look_for_keys=False, ) return jump, mk def patch_text(t: str, gw: str) -> str: dst = f"http://{gw}/status" enc = dst.replace(":", "%3A").replace("/", "%2F") t = re.sub(r"dst=\$\(link-status-esc\)", "dst=" + enc, t) t = re.sub(r"dst=\$\(link-status\)", "dst=" + enc, t) t = t.replace("url=$(link-status)", "url=" + dst) t = re.sub( r'content="\d+;\s*url=[^"]+"', 'content="2; url=' + dst + '"', t, count=1, ) return t def sftp_patch(sftp, gw: str) -> None: for name in ("login.html", "alogin.html", "error.html"): path = "hotspot/" + name try: with sftp.file(path, "rb") as f: raw = f.read() except OSError as e: print("skip", path, e) continue t = raw.decode("utf-8", "replace") n = patch_text(t, gw) if n == t: print("unchanged", path) continue with sftp.file(path, "wb") as f: f.write(n.encode("utf-8")) print("patched", path, "->", gw) if name == "login.html": m = re.search(r"wo-trial-link[^>]+", n) print(" trial", m.group(0)[:180] if m else "NO LINK") def main() -> None: print("=== RB2011 ===", flush=True) jump, mk = hub_connect() try: sftp = mk.open_sftp() sftp_patch(sftp, "10.8.192.1") sftp.close() finally: mk.close() jump.close() print("=== RB4011 ===", flush=True) jump, mk = nko_connect() try: sftp = mk.open_sftp() sftp_patch(sftp, "10.5.53.1") sftp.close() finally: mk.close() jump.close() print("DONE", flush=True) if __name__ == "__main__": main()