#!/usr/bin/env python3 """Upload Wifi-Otantik overlay and run bootstrap on the VPS.""" from __future__ import annotations import os import secrets import shutil import tarfile import tempfile import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent)) import vps_ssh ROOT = Path(r"c:\laragon\www\light-otantik-nux") SAAS = ROOT / "deploy" / "saas" SDK_SRC = ROOT / "deploy" / "nux-custom" / "system" / "paymentgateway" / "mesomb-sdk" CRED_WOYLA = ROOT / "deploy" / "credentials.env" def load_env(path: Path) -> dict[str, str]: out = {} if not path.exists(): return out for line in path.read_text(encoding="utf-8").splitlines(): line = line.strip() if not line or line.startswith("#") or "=" not in line: continue k, v = line.split("=", 1) out[k.strip()] = v.strip() return out def to_lf(path: Path) -> None: data = path.read_bytes().replace(b"\r\n", b"\n").replace(b"\r", b"\n") path.write_bytes(data) def main() -> None: wo = load_env(CRED_WOYLA) admin_pass = secrets.token_urlsafe(14) env = { "DB_NAME": "wifi_otantik", "DB_USER": "otantik", "DB_PASS": wo.get("DB_PASS", "DeararbsFr2@"), "ADMIN_USER": "superadmin", "ADMIN_PASS": admin_pass, "MESOMB_APP_KEY": wo.get("MESOMB_APP_KEY", ""), "MESOMB_ACCESS_KEY": wo.get("MESOMB_ACCESS_KEY", ""), "MESOMB_SECRET_KEY": wo.get("MESOMB_SECRET_KEY", ""), "WG_ENDPOINT": "83.147.38.107:51820", } # existing VPS mysql password from config.php env["DB_PASS"] = "DeararbsFr2@" overlay = SAAS / "nux-custom" sdk_dst = overlay / "system" / "paymentgateway" / "mesomb-sdk" if SDK_SRC.exists(): if sdk_dst.exists(): shutil.rmtree(sdk_dst) shutil.copytree(SDK_SRC, sdk_dst) cred_out = SAAS / "credentials.env" cred_out.write_text( "\n".join(f"{k}={v}" for k, v in env.items()) + "\n" + "APP_URL=https://wifi.otantik.cm\n" + "ADMIN_URL=https://business.otantik.cm/connexion\n" + "PORTAL_URL=https://portal.otantik.cm\n", encoding="utf-8", ) tmp = Path(tempfile.mkdtemp()) tar_path = tmp / "overlay.tgz" with tarfile.open(tar_path, "w:gz") as tar: tar.add(overlay, arcname="overlay") for name in ("bootstrap.sh", "otantik-wg.sh", "nginx-wifi-otantik.conf", "sudoers-otantik-wg"): p = SAAS / name to_lf(p) tar.add(p, arcname=name) print("uploading archive...") vps_ssh.put(str(tar_path), "/tmp/wifi-otantik.tgz") code, out = vps_ssh.run("mkdir -p /tmp/wifi-otantik-overlay; tar -xzf /tmp/wifi-otantik.tgz -C /tmp; rm -rf /tmp/wifi-otantik-overlay; mv /tmp/overlay /tmp/wifi-otantik-overlay; cp /tmp/bootstrap.sh /tmp/otantik-wg.sh /tmp/nginx-wifi-otantik.conf /tmp/sudoers-otantik-wg /tmp/; sed -i 's/\\r$//' /tmp/*.sh /tmp/sudoers-otantik-wg; chmod +x /tmp/bootstrap.sh /tmp/otantik-wg.sh") print(out) if code != 0: raise SystemExit(code) env_prefix = " ".join(f"{k}={repr(v)}" for k, v in env.items()) cmd = env_prefix + " bash /tmp/bootstrap.sh" print("running bootstrap...") code, out = vps_ssh.run(cmd, timeout=600, sudo=True) print(out) print("ADMIN_USER=superadmin") print("ADMIN_PASS=" + admin_pass) raise SystemExit(code) if __name__ == "__main__": main()