code wiki / _hdl_build / nx_docportal_admin_daemon_gate.nx
nx_docportal_admin_daemon_gate.nx source
↩ module page · 250 lines · 19242 B
1// nx_docportal_admin_daemon_gate.nx -- SOVEREIGN in-process referee for the admin.<domain> document-portal daemon
2// on the CANONICAL ecosystem Modern Auth (no socket/curl/shell). Arms a realm + registers an admin via the REAL
3// Modern Auth, then feeds crafted HTTP request BYTES into the pure router dad_handle and asserts the response bytes
4// AND the real upload side effect in the sovereign store -- proving the document portal is gated by the SAME auth
5// the rest of the ecosystem uses (not a bespoke scheme):
6// T1 GET /admin -> 200 + the login/upload SPA shell (public)
7// T2 POST /admin/login ok -> 200 + {"token":...} (mint a real no-cookie token)
8// T3 POST /admin/upload +tok -> 200 UPLOADED, the doc is stored, and the owner ai_blog flag took effect
9// T4 POST /admin/upload NOtok -> 401 (deny-by-default at the daemon, before da_handle)
10// T5 POST /admin/upload BADtok-> 401 (forged session rejected)
11// T6 POST /admin/login WRONGpw-> 401
12// R1 POST /admin/register +invite -> 200 + mnemonic, and the new firm admin can then log in
13// R2 POST /admin/register garbage-invite -> 403, and the user is NOT registered (login fails)
14// R3 POST /admin/register replayed (consumed) invite -> 403 (single-use enforced over HTTP)
15// S1 GET /search?q=... (PUBLIC, no session) -> 200 + the seg_store hit rendered (route matched BEFORE the
16// /admin chain; Host header -> dp-<host>-pub- shard; case-folded term match through the daemon)
17// S2 GET /search with an absent-shard Host -> 200 + "0 result(s)" (graceful isolation, never a 500)
18// S3 GET /doc?cid=<cid> (PUBLIC) -> 200 + the doc text (the SERP click-through, -pub- shard only)
19// S4 GET /doc with an absent cid -> branded 404 (never a 500)
20// GREEN iff 13/13. Appends knowledge/status/docportal_admin_daemon_gate.log. license_tier: ORIGINAL
21import "nx_docportal_admin_daemon.nx"
22import "hub/nx_modern_auth_flow.nx"
23import "nx_syscalls.nx"
24
25func 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 }
26func g_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
27func g_lw(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
28func g_cat(d: *u8, o: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { d[o + i] = s[i]; i = i + 1 } return o + i }
29func g_cat_n(d: *u8, o: i64, s: *u8, n: i64) -> i64 { var i: i64 = 0; while i < n { d[o + i] = s[i]; i = i + 1 } return o + n }
30func g_trunc(path: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 0x180); if fd >= 0 { sys_close(fd) } return 0 }
31func g_starts(buf: *u8, n: i64, s: *u8) -> i64 { let sn: i64 = g_len(s); if n < sn { return 0 } var i: i64 = 0; while i < sn { if (buf[i] as i64) != (s[i] as i64) { return 0 } i = i + 1 } return 1 }
32func g_contains(hay: *u8, n: i64, needle: *u8) -> i64 {
33 let nn: i64 = g_len(needle); var i: i64 = 0
34 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 }
35 return 0
36}
37func g_extract_token(resp: *u8, n: i64, out: *u8) -> i64 {
38 let key: *u8 = "{\"token\":\"" as *u8; let kn: i64 = 10
39 var start: i64 = 0 - 1; var i: i64 = 0
40 while i + kn <= n { var m: i64 = 1; var j: i64 = 0; while j < kn { if (resp[i + j] as i64) != (key[j] as i64) { m = 0; j = kn } else { j = j + 1 } } if m == 1 { start = i + kn; i = n } i = i + 1 }
41 if start < 0 { return 0 }
42 var w: i64 = 0; var k: i64 = start; var done: i64 = 0
43 while done == 0 { if k >= n { done = 1 } if done == 0 { if (resp[k] as i64) == 34 { done = 1 } } if done == 0 { out[w] = resp[k]; w = w + 1; k = k + 1 } }
44 return w
45}
46
47func main() -> i64 {
48 g_w("=== DOCPORTAL ADMIN DAEMON GATE (admin.<domain> on the CANONICAL Modern Auth; sovereign in-process) ===\n" as *u8)
49 let store_path: *u8 = "/tmp/nx_dad_gate_store.log" as *u8
50 let keys_path: *u8 = "/tmp/nx_dad_gate_keys.log" as *u8
51 g_trunc(store_path); g_trunc(keys_path)
52
53 let oprf_seed: *u8 = sys_mmap(32); let akp: *u8 = sys_mmap(32); let akb: *u8 = sys_mmap(33)
54 let edp: *u8 = sys_mmap(32); let edb: *u8 = sys_mmap(32)
55 if nx_uas_server_keys_load_or_init(keys_path, oprf_seed, akp, akb, edp, edb) != NX_UAS_OK { g_w("KEYS FAIL\n" as *u8); sys_exit(1) }
56 let realm: *u8 = "nishi_docportal" as *u8
57 let realm_n: i64 = g_len(realm)
58 let ctx: *NxAuthContext = sys_mmap(256) as *NxAuthContext
59 if nx_auth_context_init(ctx, realm, realm_n, realm, realm_n, store_path as i64, oprf_seed, edp, edb, 900, 8192, 1, 1, 5, 1) != NX_MAUTH_OK { g_w("CTX FAIL\n" as *u8); sys_exit(1) }
60 let mn: *u8 = sys_mmap(512); let mn_n: *i64 = sys_mmap(16) as *i64
61 if nx_modern_auth_register(ctx, "elder" as *u8, 5, "correct horse battery staple" as *u8, 28, mn, 512, mn_n) != NX_MAUTH_OK { g_w("REGISTER FAIL\n" as *u8); sys_exit(1) }
62
63 let req: *u8 = sys_mmap(8192)
64 let out: *u8 = sys_mmap(DAD_OUTCAP)
65 var pass: i64 = 0
66
67 // T1: GET /admin -> 200 + shell
68 let n1: i64 = g_cat(req, 0, "GET /admin HTTP/1.1\r\nHost: x\r\n\r\n" as *u8)
69 let o1: i64 = dad_handle(ctx, req, n1, out)
70 var t1: i64 = 0
71 if g_starts(out, o1, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, o1, "id=login" as *u8) == 1 { t1 = 1 } }
72 pass = pass + t1; g_w(" T1 GET /admin -> 200 shell: "); if t1 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
73
74 // T2: POST /admin/login (correct) -> token
75 let n2: i64 = g_cat(req, 0, "POST /admin/login HTTP/1.1\r\nHost: x\r\n\r\nhandle=elder&passphrase=correct+horse+battery+staple" as *u8)
76 let o2: i64 = dad_handle(ctx, req, n2, out)
77 let tokbuf: *u8 = sys_mmap(256); var tok_n: i64 = 0
78 var t2: i64 = 0
79 if g_starts(out, o2, "HTTP/1.1 200" as *u8) == 1 { tok_n = g_extract_token(out, o2, tokbuf); if tok_n > 0 { t2 = 1 } }
80 pass = pass + t2; g_w(" T2 POST /admin/login -> token: "); if t2 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
81
82 // T3: authed upload (X-Nishi-Session + body) -> 200 UPLOADED + stored + ai_blog flag took effect
83 let body: *u8 = "Daemon-path public estate planning guide cleared for AI blog use." as *u8
84 let blen: i64 = g_len(body)
85 let cid: i64 = dp_cid(body, blen)
86 var n3: i64 = g_cat(req, 0, "POST /admin/upload?domain=ddaemon&visibility=public&pub_search=1&ai_blog=1 HTTP/1.1\r\nHost: x\r\nX-Nishi-Session: " as *u8)
87 n3 = g_cat_n(req, n3, tokbuf, tok_n)
88 n3 = g_cat(req, n3, "\r\n\r\n" as *u8)
89 n3 = g_cat_n(req, n3, body, blen)
90 let o3: i64 = dad_handle(ctx, req, n3, out)
91 let pq: *i64 = sys_mmap(16) as *i64; let lq: *i64 = sys_mmap(16) as *i64
92 var t3: i64 = 0
93 if g_starts(out, o3, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, o3, "UPLOADED" as *u8) == 1 {
94 if dp_read("ddaemon" as *u8, DP_VIS_PUBLIC, cid, pq, lq) == 1 { if dp_may("ddaemon" as *u8, DP_VIS_PUBLIC, cid, DP_USE_AI_BLOG) == 1 { t3 = 1 } }
95 } }
96 pass = pass + t3; g_w(" T3 authed upload stored + ai_blog flagged: "); if t3 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
97
98 // T4: upload WITHOUT a session -> 401 (deny-by-default at the daemon)
99 let nofake: *u8 = "Should never be stored: no session." as *u8
100 let nflen: i64 = g_len(nofake)
101 let nfcid: i64 = dp_cid(nofake, nflen)
102 var n4: i64 = g_cat(req, 0, "POST /admin/upload?domain=ddaemon&visibility=public HTTP/1.1\r\nHost: x\r\n\r\n" as *u8)
103 n4 = g_cat_n(req, n4, nofake, nflen)
104 let o4: i64 = dad_handle(ctx, req, n4, out)
105 var t4: i64 = 0
106 if g_starts(out, o4, "HTTP/1.1 401" as *u8) == 1 { if dp_read("ddaemon" as *u8, DP_VIS_PUBLIC, nfcid, pq, lq) == 0 { t4 = 1 } }
107 pass = pass + t4; g_w(" T4 no-session upload -> 401 + not stored: "); if t4 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
108
109 // T5: upload with a FORGED session -> 401
110 var n5: i64 = g_cat(req, 0, "POST /admin/upload?domain=ddaemon&visibility=public HTTP/1.1\r\nHost: x\r\nX-Nishi-Session: AAAAAAAA\r\n\r\nx" as *u8)
111 let o5: i64 = dad_handle(ctx, req, n5, out)
112 var t5: i64 = 0
113 if g_starts(out, o5, "HTTP/1.1 401" as *u8) == 1 { t5 = 1 }
114 pass = pass + t5; g_w(" T5 forged-session upload -> 401: "); if t5 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
115
116 // T6: wrong-passphrase login -> 401
117 let n6: i64 = g_cat(req, 0, "POST /admin/login HTTP/1.1\r\nHost: x\r\n\r\nhandle=elder&passphrase=wrong+passphrase" as *u8)
118 let o6: i64 = dad_handle(ctx, req, n6, out)
119 var t6: i64 = 0
120 if g_starts(out, o6, "HTTP/1.1 401" as *u8) == 1 { t6 = 1 }
121 pass = pass + t6; g_w(" T6 wrong-pw login -> 401: "); if t6 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
122
123 // ---- INVITE-GATED SELF-REGISTRATION (POST /admin/register) ----
124 // Derive the SAME per-realm invite store the daemon derives (dad_invite_path) and start it clean.
125 let invpath: *u8 = sys_mmap(512)
126 dad_invite_path(ctx, invpath)
127 g_trunc(invpath)
128 let rnow: i64 = sys_now_realtime_sec()
129
130 // R1: mint a real invite -> POST /admin/register (invite+handle+pw) -> 200 + mnemonic, and the
131 // new firm admin can then nx_modern_auth_login (proves the OPAQUE record actually LANDED in the store).
132 let invtok: *u8 = sys_mmap(80)
133 let ri: i64 = inv_issue(invpath, realm, realm_n, 2, 3600, rnow, invtok)
134 var nr1: i64 = g_cat(req, 0, "POST /admin/register HTTP/1.1\r\nHost: x\r\n\r\nhandle=firmadmin&pw=lawfirm+secret+passphrase&invite=" as *u8)
135 nr1 = g_cat_n(req, nr1, invtok, NX_INV_TOKEN_HEX)
136 let or1: i64 = dad_handle(ctx, req, nr1, out)
137 var r1: i64 = 0
138 if ri == NX_INV_OK { if g_starts(out, or1, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, or1, "mnemonic" as *u8) == 1 {
139 let rtk: *u8 = sys_mmap(NX_MAUTH_SESSION_TOKEN_BYTES); let rtn: *i64 = sys_mmap(16) as *i64; rtn[0] = 0
140 if nx_modern_auth_login(ctx, "firmadmin" as *u8, 9, "lawfirm secret passphrase" as *u8, 25, rtk, NX_MAUTH_SESSION_TOKEN_BYTES, rtn) == NX_MAUTH_OK { r1 = 1 }
141 } } }
142 pass = pass + r1; g_w(" R1 invite register -> 200 + the new admin can log in: "); if r1 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
143
144 // R2: NEG garbage invite -> 403, and the intruder is NOT registered (a subsequent login must fail).
145 var nr2: i64 = g_cat(req, 0, "POST /admin/register HTTP/1.1\r\nHost: x\r\n\r\nhandle=intruder&pw=intruder+pw+here&invite=00000000000000000000000000000000000000000000000000000000deadbeef" as *u8)
146 let or2: i64 = dad_handle(ctx, req, nr2, out)
147 var r2: i64 = 0
148 if g_starts(out, or2, "HTTP/1.1 403" as *u8) == 1 {
149 let rtk2: *u8 = sys_mmap(NX_MAUTH_SESSION_TOKEN_BYTES); let rtn2: *i64 = sys_mmap(16) as *i64; rtn2[0] = 0
150 if nx_modern_auth_login(ctx, "intruder" as *u8, 8, "intruder pw here" as *u8, 16, rtk2, NX_MAUTH_SESSION_TOKEN_BYTES, rtn2) != NX_MAUTH_OK { r2 = 1 }
151 }
152 pass = pass + r2; g_w(" R2 NEG garbage invite -> 403 + not registered: "); if r2 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
153
154 // R3: NEG single-use replay. The R1 invite was consumed on success; replaying it must -> 403.
155 var nr3: i64 = g_cat(req, 0, "POST /admin/register HTTP/1.1\r\nHost: x\r\n\r\nhandle=replayer&pw=replayer+pw+ok&invite=" as *u8)
156 nr3 = g_cat_n(req, nr3, invtok, NX_INV_TOKEN_HEX)
157 let or3: i64 = dad_handle(ctx, req, nr3, out)
158 var r3: i64 = 0
159 if g_starts(out, or3, "HTTP/1.1 403" as *u8) == 1 {
160 let rtk3: *u8 = sys_mmap(NX_MAUTH_SESSION_TOKEN_BYTES); let rtn3: *i64 = sys_mmap(16) as *i64; rtn3[0] = 0
161 if nx_modern_auth_login(ctx, "replayer" as *u8, 8, "replayer pw ok" as *u8, 14, rtk3, NX_MAUTH_SESSION_TOKEN_BYTES, rtn3) != NX_MAUTH_OK { r3 = 1 }
162 }
163 pass = pass + r3; g_w(" R3 NEG single-use replay -> 403: "); if r3 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
164
165 // ---- PUBLIC SOVEREIGN /search THROUGH THE DAEMON (R4b: route + Host->shard, no auth) ----
166 // Write a real PUBLIC doc into the dadsearch shard through the raw sovereign store (same
167 // incantation as nx_docportal_search_seg_gate; content-addressed key -> re-runs are clean).
168 let sdoc: *u8 = "Probate and estate administration guidance for Texas families." as *u8
169 let sw: *i64 = ss_begin()
170 ss_add(sw, 1, "doc:501" as *u8, sdoc, g_len(sdoc))
171 ss_commit("knowledge/store/dp-dadsearch-pub-" as *u8, sw, 1)
172
173 // S1: PUBLIC GET /search (NO session header) routed to dss_serve; Host: dadsearch keys the shard;
174 // capital "Probate" in the doc vs lowercase query proves the case-folded tokenizer alignment E2E.
175 // scope=site EXPLICIT since the 2026-07-24 wiring fix made web the default scope -- site portals
176 // reach their own shard via the same &scope=site every rendered site link carries.
177 let ns1: i64 = g_cat(req, 0, "GET /search?q=probate&scope=site HTTP/1.1\r\nHost: dadsearch\r\n\r\n" as *u8)
178 let os1: i64 = dad_handle(ctx, req, ns1, out)
179 var s1: i64 = 0
180 // the leading "Probate" is <b>-highlighted (R5), so assert the highlighted rendering exactly
181 if g_starts(out, os1, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, os1, "<b>Probate</b> and estate administration" as *u8) == 1 { if g_contains(out, os1, "1 result(s)" as *u8) == 1 { s1 = 1 } } }
182 pass = pass + s1; g_w(" S1 public /search -> 200 + seg_store hit: "); if s1 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
183
184 // S2 NEG: absent-shard Host -> 200 + zero results (isolation degrades gracefully, never a 500)
185 let ns2: i64 = g_cat(req, 0, "GET /search?q=probate HTTP/1.1\r\nHost: nosuchdomain-xyz\r\n\r\n" as *u8)
186 let os2: i64 = dad_handle(ctx, req, ns2, out)
187 var s2: i64 = 0
188 if g_starts(out, os2, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, os2, "0 result(s)" as *u8) == 1 { s2 = 1 } }
189 pass = pass + s2; g_w(" S2 NEG absent-shard /search -> 200 + 0 results: "); if s2 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
190
191 // S3: PUBLIC /doc click-through routed through the daemon (boundary-guarded route -> dsv_doc_serve)
192 let ns3: i64 = g_cat(req, 0, "GET /doc?cid=501&scope=site HTTP/1.1\r\nHost: dadsearch\r\n\r\n" as *u8)
193 let os3: i64 = dad_handle(ctx, req, ns3, out)
194 var s3: i64 = 0
195 if g_starts(out, os3, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, os3, "Probate and estate administration" as *u8) == 1 { s3 = 1 } }
196 pass = pass + s3; g_w(" S3 public /doc -> 200 + doc text: "); if s3 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
197
198 // S4 NEG: /doc with an absent cid -> branded 404 through the daemon (never a 500)
199 let ns4: i64 = g_cat(req, 0, "GET /doc?cid=424242 HTTP/1.1\r\nHost: dadsearch\r\n\r\n" as *u8)
200 let os4: i64 = dad_handle(ctx, req, ns4, out)
201 var s4: i64 = 0
202 if g_starts(out, os4, "HTTP/1.1 404" as *u8) == 1 { s4 = 1 }
203 pass = pass + s4; g_w(" S4 NEG /doc absent-cid -> 404: "); if s4 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
204
205 // S5: API-FIRST through the router -- /api/search answers versioned JSON with CORS (public machine contract)
206 let ns5: i64 = g_cat(req, 0, "GET /api/search?q=probate&scope=site HTTP/1.1\r\nHost: dadsearch\r\n\r\n" as *u8)
207 let os5: i64 = dad_handle(ctx, req, ns5, out)
208 var s5: i64 = 0
209 if g_starts(out, os5, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, os5, "\"v\":1" as *u8) == 1 { if g_contains(out, os5, "\"nresults\":1" as *u8) == 1 { if g_contains(out, os5, "application/json" as *u8) == 1 { s5 = 1 } } } }
210 pass = pass + s5; g_w(" S5 /api/search JSON through the router: "); if s5 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
211
212 // S6 NEG: /api/doc structured 400 on a malformed cid (machine-readable error contract)
213 let ns6: i64 = g_cat(req, 0, "GET /api/doc?cid=xyz HTTP/1.1\r\nHost: dadsearch\r\n\r\n" as *u8)
214 let os6: i64 = dad_handle(ctx, req, ns6, out)
215 var s6: i64 = 0
216 if g_starts(out, os6, "HTTP/1.1 400" as *u8) == 1 { if g_contains(out, os6, "\"code\":\"bad_cid\"" as *u8) == 1 { s6 = 1 } }
217 pass = pass + s6; g_w(" S6 NEG /api/doc malformed -> 400 bad_cid: "); if s6 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
218
219 // S7: /api/openapi.json machine-readable contract through the router (enterprise API discovery)
220 let ns7: i64 = g_cat(req, 0, "GET /api/openapi.json HTTP/1.1\r\nHost: dadsearch\r\n\r\n" as *u8)
221 let os7: i64 = dad_handle(ctx, req, ns7, out)
222 var s7: i64 = 0
223 if g_starts(out, os7, "HTTP/1.1 200" as *u8) == 1 { if g_contains(out, os7, "\"openapi\":\"3.1.0\"" as *u8) == 1 { if g_contains(out, os7, "\"/api/search\":" as *u8) == 1 { s7 = 1 } } }
224 pass = pass + s7; g_w(" S7 /api/openapi.json spec through the router: "); if s7 == 1 { g_w("PASS\n" as *u8) } else { g_w("FAIL\n" as *u8) }
225
226 g_w("----\nDOCPORTAL-ADMIN-DAEMON rows=16 pass="); let db: *u8 = sys_mmap(8); var v: i64 = pass; var k: i64 = 0; if v == 0 { db[0] = 48 as u8; k = 1 } else { while v > 0 { db[k] = (48 + (v % 10)) as u8; v = v / 10; k = k + 1 } } let rv: *u8 = sys_mmap(8); var x: i64 = 0; while x < k { rv[x] = db[k - 1 - x]; x = x + 1 } sys_write(1, rv, k); g_w("\n" as *u8)
227 let lg: i64 = sys_openat_append("knowledge/status/docportal_admin_daemon_gate.log" as *u8, 0x1a4)
228 if lg >= 0 {
229 g_lw(lg, "DOCPORTAL-ADMIN-DAEMON auth=modern-opaque shell="); g_lw(lg, "1"); g_lw(lg, " login_token="); if t2 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
230 g_lw(lg, " authed_upload="); if t3 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
231 g_lw(lg, " deny_no_session="); if t4 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
232 g_lw(lg, " deny_forged="); if t5 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
233 g_lw(lg, " deny_wrongpw="); if t6 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
234 g_lw(lg, " self_register="); if r1 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
235 g_lw(lg, " deny_bad_invite="); if r2 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
236 g_lw(lg, " deny_replay_invite="); if r3 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
237 g_lw(lg, " public_search="); if s1 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
238 g_lw(lg, " search_absent_shard_0="); if s2 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
239 g_lw(lg, " public_doc="); if s3 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
240 g_lw(lg, " doc_absent_404="); if s4 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
241 g_lw(lg, " api_search_json="); if s5 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
242 g_lw(lg, " api_doc_400="); if s6 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
243 g_lw(lg, " api_openapi="); if s7 == 1 { g_lw(lg, "1") } else { g_lw(lg, "0") }
244 g_lw(lg, " rows=16 pass="); sys_write(lg, rv, k)
245 if pass == 16 { g_lw(lg, " verdict=GREEN\n" as *u8) } else { g_lw(lg, " verdict=RED\n" as *u8) }
246 sys_close(lg)
247 }
248 if pass == 16 { g_w("DOCPORTAL-ADMIN-DAEMON GREEN (canonical Modern Auth gates the portal + PUBLIC sovereign /search + /doc + API-FIRST /api/search + /api/doc + /api/openapi.json, measured)\n" as *u8); sys_exit(0); return 0 }
249 g_w("DOCPORTAL-ADMIN-DAEMON RED\n" as *u8); sys_exit(1); return 1
250}