code wiki / _hdl_build / nx_ssh_deploy_page.nx

nx_ssh_deploy_page.nx source

↩ module page · 76 lines · 4757 B

1// nx_ssh_deploy_page.nx -- the team EXECUTES a sovereign page deploy: read the local page, BACK UP any 2// existing remote copy, ssh_put_file it into the live web doc root, then VERIFY (size + fetch it back 3// over :8443). No scp, no 3rd party. Honest liveness: it reports whether the live daemon actually serves 4// it. license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_ssh_lib.nx" 7const K_MAGIC_1048576: i64 = 1048576 8const K_MAGIC_16384: i64 = 16384 9const K_MAGIC_65536: i64 = 65536 10const K_MAGIC_1024: i64 = 1024 11 12func slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != 0 as u8 { n = n + 1 } return n } 13 14func ssh_put_file(st: *SshState, wcmd: *u8, wcmdlen: i64, data: *u8, datalen: i64) -> i64 { 15 let co: *u8 = sys_mmap(64); var c: i64 = 0 16 c = ssh_put_byte(co, c, 90); c = ssh_put_str(co, c, "session" as *u8, 7) 17 c = ssh_put_u32(co, c, 0); c = ssh_put_u32(co, c, K_MAGIC_1048576); c = ssh_put_u32(co, c, K_MAGIC_16384) 18 ssh_enc_send(st, co, c) 19 let rep: *u8 = sys_mmap(K_MAGIC_65536); var rcid: i64 = 0 - 1; var guard: i64 = 0 20 while rcid < 0 { 21 if guard > 16 { return 0 - 1 } 22 let rl: i64 = ssh_enc_recv(st, rep); if rl < 0 { return 0 - 1 } 23 if rep[0] == 91 as u8 { rcid = ssh_u32be(rep, 5) } 24 if rep[0] == 92 as u8 { return 0 - 2 } 25 guard = guard + 1 26 } 27 let cr: *u8 = sys_mmap(K_MAGIC_1024); var q: i64 = 0 28 q = ssh_put_byte(cr, q, 98); q = ssh_put_u32(cr, q, rcid); q = ssh_put_str(cr, q, "exec" as *u8, 4); q = ssh_put_byte(cr, q, 1); q = ssh_put_str(cr, q, wcmd, wcmdlen) 29 ssh_enc_send(st, cr, q) 30 var off: i64 = 0 31 while off < datalen { 32 var nn: i64 = datalen - off; if nn > K_MAGIC_16384 { nn = K_MAGIC_16384 } 33 let dp: *u8 = sys_mmap(nn + 64); var p: i64 = 0 34 p = ssh_put_byte(dp, p, 94); p = ssh_put_u32(dp, p, rcid); p = ssh_put_u32(dp, p, nn) 35 var i: i64 = 0; while i < nn { dp[p + i] = data[off + i]; i = i + 1 } p = p + nn 36 ssh_enc_send(st, dp, p) 37 off = off + nn 38 } 39 let eo: *u8 = sys_mmap(16); var e: i64 = 0; e = ssh_put_byte(eo, e, 96); e = ssh_put_u32(eo, e, rcid); ssh_enc_send(st, eo, e) 40 var done: i64 = 0; var loops: i64 = 0 41 while done == 0 { if loops > K_MAGIC_16384 { done = 1 } let rl: i64 = ssh_enc_recv(st, rep); if rl < 0 { done = 1 } else { if rep[0] == 97 as u8 { done = 1 } } loops = loops + 1 } 42 let clo: *u8 = sys_mmap(16); var k: i64 = 0; k = ssh_put_byte(clo, k, 97); k = ssh_put_u32(clo, k, rcid); ssh_enc_send(st, clo, k) 43 return 0 44} 45 46func main() -> i64 { 47 let pwbox: *i64 = sys_mmap(16) as *i64 48 let pw: *u8 = sys_read_file("/tmp/nxpw" as *u8, pwbox) 49 if (pw as i64) == 0 { ssh_puts("no /tmp/nxpw\n" as *u8); return 1 } 50 var pwlen: i64 = pwbox[0] 51 while pwlen > 0 { if pw[pwlen-1] == 10 as u8 { pwlen = pwlen - 1 } else { if pw[pwlen-1] == 13 as u8 { pwlen = pwlen - 1 } else { break } } } 52 53 // read the local roadmap page (reality-reflecting, team-generated) 54 let pgbox: *i64 = sys_mmap(16) as *i64 55 let page: *u8 = sys_read_file("/mnt/c/Users/elder/nishi-core/nxc2/knowledge/projects/nishi_ecosystem_roadmap.html" as *u8, pgbox) 56 if (page as i64) == 0 { ssh_puts("no local page\n" as *u8); return 1 } 57 let pglen: i64 = pgbox[0] 58 59 let st: *SshState = sys_mmap(SSH_STATE_BYTES) as *SshState 60 if ssh_open_session(st, (192 << 24) | (168 << 16) | (8 << 8) | 227) != 0 { ssh_puts("session fail\n" as *u8); return 2 } 61 if ssh_userauth_password(st, "elderwesto" as *u8, 10, pw, pwlen) != 1 { ssh_puts("auth fail\n" as *u8); sys_close(st.fd); return 3 } 62 ssh_puts("[auth ok] executing sovereign page deploy:\n" as *u8) 63 64 // STEP 1 -- BACKUP any existing copy (rollback point) 65 ssh_exec(st, "D=/volume1/docker/nishi-engine/nx_pages_deploy/web/pages; mkdir -p $D; [ -f $D/roadmap.html ] && cp -f $D/roadmap.html $D/roadmap.html.bak && echo BACKED-UP || echo NO-PRIOR" as *u8, slen("D=/volume1/docker/nishi-engine/nx_pages_deploy/web/pages; mkdir -p $D; [ -f $D/roadmap.html ] && cp -f $D/roadmap.html $D/roadmap.html.bak && echo BACKED-UP || echo NO-PRIOR" as *u8)) 66 67 // STEP 2 -- sovereign transfer into the doc root 68 let wcmd: *u8 = "cat > /volume1/docker/nishi-engine/nx_pages_deploy/web/pages/roadmap.html" as *u8 69 ssh_put_file(st, wcmd, slen(wcmd), page, pglen) 70 71 // STEP 3 -- VERIFY size + liveness on :8443 (does the LIVE daemon serve it?) 72 let vcmd: *u8 = "echo ---VERIFY---; wc -c /volume1/docker/nishi-engine/nx_pages_deploy/web/pages/roadmap.html; echo ---LIVE-8443---; curl -sk https://localhost:8443/pages/roadmap.html -H 'Host: nishifamily.com' 2>/dev/null | grep -oE '<title>[^<]*</title>|165/170' | head -2; echo ---END---" as *u8 73 ssh_exec(st, vcmd, slen(vcmd)) 74 sys_close(st.fd) 75 return 0 76}