import base64
import json
import os
from pathlib import Path
import stat
import subprocess
import sys

os.umask(0o077)
HERE = Path(__file__).parent
SECRET = Path('/run/contextra-icerti-sudo.AvkYeS/password')
SSH = ['ssh', '-i', '/root/.ssh/ltb1021_contextra_icerti_si_ed25519', '-p', '1023',
       '-o', 'BatchMode=yes', '-o', 'StrictHostKeyChecking=yes',
       '-o', 'UserKnownHostsFile=/root/.ssh/contextra_icerti_known_hosts', '-o', 'ConnectTimeout=8',
       'si@58.233.207.31']

def remote(script, timeout=60):
    for path, mode in ((SECRET.parent, 0o700), (SECRET, 0o600)):
        s = path.lstat()
        assert not stat.S_ISLNK(s.st_mode) and s.st_uid == 0 and stat.S_IMODE(s.st_mode) == mode
    encoded = base64.b64encode(script.encode()).decode()
    command = "sudo -S -p '' python3 -B -c \"import base64,os;os.close(0);exec(base64.b64decode('%s'))\"" % encoded
    r = subprocess.run(SSH+[command], input=SECRET.read_bytes(), capture_output=True, timeout=timeout)
    if r.returncode:
        raise RuntimeError('REMOTE_FAILED '+str(r.returncode)+' '+r.stderr.decode()[-2000:])
    return r.stdout.decode()

if __name__ == '__main__':
    print(remote(Path(sys.argv[1]).read_text(), int(sys.argv[2]) if len(sys.argv)>2 else 60))
