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}