import base64 import time from pathlib import Path import vps_ssh def ssh_put_b64(local, remote, sudo_cp=True): data = Path(local).read_bytes() b64 = base64.b64encode(data).decode("ascii") tmp = "/tmp/wo_up.b64" code, out = vps_ssh.run(f"rm -f {tmp}; echo start", timeout=30) print(Path(local).name, "bytes", len(data), "b64", len(b64), out.strip()) step = 1200 for i in range(0, len(b64), step): chunk = b64[i:i+step] for attempt in range(4): try: code, out = vps_ssh.run(f"printf %s '{chunk}' >> {tmp}", timeout=30) if code == 0: break except Exception as e: print("chunk err", attempt, type(e).__name__) time.sleep(1.5) else: raise SystemExit("chunk fail") time.sleep(0.15) dest_tmp = "/tmp/wo_up.bin" cmd = f"base64 -d {tmp} > {dest_tmp} && wc -c {dest_tmp}" code, out = vps_ssh.run(cmd, timeout=60) print(out) if code != 0: raise SystemExit(code) if sudo_cp: code, out = vps_ssh.run( f"cp {dest_tmp} {remote} && chown www-data:www-data {remote} && wc -c {remote}", timeout=40, sudo=True, ) print(out) if code != 0: raise SystemExit(code) # Sync ui pay_wait Path(r"c:\laragon\www\light-otantik-nux\deploy\saas\nux-custom\ui\ui_custom\otantik_pay_wait.tpl").write_bytes( Path(r"c:\laragon\www\light-otantik-nux\deploy\saas\nux-custom\system\plugin\ui\otantik_pay_wait.tpl").read_bytes() ) pairs = [ (r"c:\laragon\www\light-otantik-nux\deploy\saas\nux-custom\system\plugin\ui\otantik_voucher.tpl", "/var/www/wifi-otantik/system/plugin/ui/otantik_voucher.tpl"), (r"c:\laragon\www\light-otantik-nux\deploy\saas\nux-custom\ui\ui_custom\otantik_voucher.tpl", "/var/www/wifi-otantik/ui/ui_custom/otantik_voucher.tpl"), (r"c:\laragon\www\light-otantik-nux\deploy\saas\nux-custom\system\plugin\ui\otantik_pay_wait.tpl", "/var/www/wifi-otantik/system/plugin/ui/otantik_pay_wait.tpl"), (r"c:\laragon\www\light-otantik-nux\deploy\saas\nux-custom\ui\ui_custom\otantik_pay_wait.tpl", "/var/www/wifi-otantik/ui/ui_custom/otantik_pay_wait.tpl"), ] for a,b in pairs: ssh_put_b64(a,b) time.sleep(1) print("TEMPLATES_OK")