code wiki / _hdl_build / nx_site_handler_gate.nx

nx_site_handler_gate.nx source

↩ module page · 98 lines · 5503 B

1// nx_site_handler_gate.nx -- SOVEREIGN in-process gate for the reconciled daemon's request handler (no TLS/socket). 2// Crafts HTTP request bytes -> asserts the handler's decision/response: an app route -> PROXY signal (port+mode for 3// the transport to relay); a provisioned vhost -> SERVE its docroot (200 + the file); unknown -> 404. Host parsing 4// is case-insensitive; a vhost whose docroot file is missing -> 404 (no half-served page). GREEN iff T1..T6. 5// Sovereign: nx_site_handler + nx_syscalls. license_tier: ORIGINAL 6import "nx_site_handler.nx" 7import "nx_syscalls.nx" 8 9func g_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 10func g_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 11func g_row(name: *u8, ok: i64) -> i64 { 12 if ok == 1 { g_w(" PASS " as *u8) } else { g_w(" FAIL " as *u8) } 13 g_w(name); g_w("\n" as *u8) 14 return ok 15} 16func g_starts(buf: *u8, n: i64, s: *u8) -> i64 { 17 let sn: i64 = g_len(s); if n < sn { return 0 } 18 var i: i64 = 0; while i < sn { if (buf[i] as i64) != (s[i] as i64) { return 0 } i = i + 1 } return 1 19} 20func g_contains(hay: *u8, n: i64, needle: *u8) -> i64 { 21 let nn: i64 = g_len(needle); var i: i64 = 0 22 while i + nn <= n { var m: i64=1; var j: i64=0; while j<nn { if (hay[i+j] as i64)!=(needle[j] as i64){m=0;j=nn} else {j=j+1} } if m==1 {return 1} i=i+1 } 23 return 0 24} 25 26const GH_RT: *u8 = "nishifamily.com /gallery 18190 stream\n" as *u8 27// vhosts: bradrwest -> a real fixture file; brokensite -> a nonexistent docroot (the missing-file 404 case) 28const GH_VT: *u8 = "bradrwest.com /tmp/sh_docroot.html\nbrokensite.com /tmp/sh_does_not_exist.html\n" as *u8 29 30func main() -> i64 { 31 g_w("site-handler gate (request -> proxy-signal / serve-docroot / 404, in-process, no TLS)\n" as *u8) 32 // fixture docroot 33 let fd: i64 = sys_openat_wr("/tmp/sh_docroot.html" as *u8, 0x180) 34 if fd >= 0 { let b: *u8 = "<!doctype html><h1>Brad West Hub</h1>" as *u8; sys_write(fd, b, g_len(b)); sys_close(fd) } 35 36 let rtn: i64 = g_len(GH_RT); let vtn: i64 = g_len(GH_VT) 37 let out: *u8 = sys_mmap(262144) 38 let dec: *i64 = sys_mmap(64) as *i64 39 var pass: i64 = 0 40 41 // ★ T1: /gallery -> PROXY signal (port 18190, mode stream); out_n 0 (transport relays) 42 var req: *u8 = "GET /gallery HTTP/1.1\r\nHost: nishifamily.com\r\nConnection: close\r\n\r\n" as *u8 43 dec[0]=0-9; dec[1]=0; dec[2]=0 44 let o1: i64 = sh_handle(req, g_len(req), GH_RT, rtn, GH_VT, vtn, out, dec) 45 var t1: i64 = 0 46 if dec[0]==SH_PROXY { if dec[1]==18190 { if dec[2]==RT_STREAM { if o1==0 { t1=1 } } } } 47 pass = pass + g_row("T1 /gallery -> PROXY signal 18190 stream (transport relays)\x00" as *u8, t1) 48 49 // ★ T2: bradrwest.com / -> SERVE the docroot file (200 + the hub content) 50 req = "GET / HTTP/1.1\r\nHost: bradrwest.com\r\nConnection: close\r\n\r\n" as *u8 51 dec[0]=0-9 52 let o2: i64 = sh_handle(req, g_len(req), GH_RT, rtn, GH_VT, vtn, out, dec) 53 var t2: i64 = 0 54 if dec[0]==SH_STATIC { if g_starts(out, o2, "HTTP/1.1 200" as *u8)==1 { if g_contains(out, o2, "Brad West Hub" as *u8)==1 { t2=1 } } } 55 pass = pass + g_row("T2 bradrwest.com / -> 200 + served docroot (Brad West Hub)\x00" as *u8, t2) 56 57 // T3: unknown host -> 404 58 req = "GET /x HTTP/1.1\r\nHost: unknown.com\r\nConnection: close\r\n\r\n" as *u8 59 dec[0]=0-9 60 let o3: i64 = sh_handle(req, g_len(req), GH_RT, rtn, GH_VT, vtn, out, dec) 61 var t3: i64 = 0 62 if dec[0]==SH_NOTFOUND { if g_starts(out, o3, "HTTP/1.1 404" as *u8)==1 { t3=1 } } 63 pass = pass + g_row("T3 unknown.com -> 404\x00" as *u8, t3) 64 65 // T4: Host parsing case-insensitive -> still serves the vhost 66 req = "GET / HTTP/1.1\r\nHost: BradrWest.COM\r\nConnection: close\r\n\r\n" as *u8 67 dec[0]=0-9 68 let o4: i64 = sh_handle(req, g_len(req), GH_RT, rtn, GH_VT, vtn, out, dec) 69 var t4: i64 = 0 70 if dec[0]==SH_STATIC { if g_contains(out, o4, "Brad West Hub" as *u8)==1 { t4=1 } } 71 pass = pass + g_row("T4 Host case-insensitive (BradrWest.COM) -> served\x00" as *u8, t4) 72 73 // T5: a vhost whose docroot FILE is missing -> 404 (no half-served/empty 200) 74 req = "GET / HTTP/1.1\r\nHost: brokensite.com\r\nConnection: close\r\n\r\n" as *u8 75 dec[0]=0-9 76 let o5: i64 = sh_handle(req, g_len(req), GH_RT, rtn, GH_VT, vtn, out, dec) 77 var t5: i64 = 0 78 if dec[0]==SH_NOTFOUND { if g_starts(out, o5, "HTTP/1.1 404" as *u8)==1 { t5=1 } } 79 pass = pass + g_row("T5 vhost with MISSING docroot file -> 404 (no half-served page)\x00" as *u8, t5) 80 81 // T6: boundary-safe end-to-end -- /galleryX is not /gallery and not a vhost -> 404 82 req = "GET /galleryX HTTP/1.1\r\nHost: nishifamily.com\r\nConnection: close\r\n\r\n" as *u8 83 dec[0]=0-9 84 let o6: i64 = sh_handle(req, g_len(req), GH_RT, rtn, GH_VT, vtn, out, dec) 85 var t6: i64 = 0 86 if dec[0]==SH_NOTFOUND { if g_starts(out, o6, "HTTP/1.1 404" as *u8)==1 { t6=1 } } 87 pass = pass + g_row("T6 /galleryX -> 404 (boundary-safe through the handler)\x00" as *u8, t6) 88 89 if pass == 6 { 90 let lg: i64 = sys_openat_append("knowledge/status/site_handler_gate.log" as *u8, 0x1a4) 91 if lg >= 0 { sys_write(lg, "SITE-HANDLER-GATE pass=6/6 verdict=GREEN\n" as *u8, 40); sys_close(lg) } 92 g_w("SITE-HANDLER GATE GREEN 6/6 (proxy-signal / serve-docroot / 404, data-driven, no hardcoding)\n" as *u8) 93 sys_exit(0) 94 } 95 g_w("SITE-HANDLER GATE RED\n" as *u8) 96 sys_exit(1) 97 return 1 98}