code wiki / _hdl_build / nx_ad_banner_builder_gate.nx

nx_ad_banner_builder_gate.nx source

↩ module page · 76 lines · 5087 B

1// nx_ad_banner_builder_gate.nx -- GATE for the server-rendered banner builder. Proves: the GET form has the 2// fields and is ZERO-JS; a POST renders a clean generated banner (correct size + animation) with the form 3// repopulated; an injected sponsor stays escaped; empty input yields no banner. Emits the builder page 4// samples to knowledge/staging/ad/ as evidence. Sovereign, no gcc/.sh. license_tier: ORIGINAL 5import "nx_ad_banner_builder.nx" 6import "nx_ad_serve.nx" 7import "nx_syscalls.nx" 8import "nx_gate_verdict.nx" 9 10func g_p(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 11func g_write(fname: *u8, buf: *u8, n: i64) -> i64 { let fd: i64 = sys_openat_wr(fname, 420); if fd >= 0 { sys_write(fd, buf, n); sys_close(fd) } return 0 } 12 13func main(argc: i64, argv: *i64) -> i64 { 14 g_p("=== nx_ad_banner_builder_gate ===\n" as *u8) 15 let page: *u8 = sys_mmap(65536) 16 var pass: i64 = 0 17 var tot: i64 = 0 18 19 // ---- T1: GET (empty body) -> the form, zero JS, no preview yet. 20 let empty: *u8 = sys_mmap(8); empty[0] = 0 as u8 21 let g1: i64 = abb_page(empty, 0, page) 22 g_write("knowledge/staging/ad/banner_builder.html" as *u8, page, g1) 23 tot = tot + 1; var ok1: i64 = 1 24 if as_contains(page, g1, "name='business'" as *u8) != 1 { ok1 = 0 } 25 if as_contains(page, g1, "leaderboard" as *u8) != 1 { ok1 = 0 } 26 if as_contains(page, g1, "dynamic" as *u8) != 1 { ok1 = 0 } 27 if as_contains(page, g1, "<script" as *u8) != 0 { ok1 = 0 } // builder is ZERO-JS 28 if as_contains(page, g1, "Preview" as *u8) != 0 { ok1 = 0 } // nothing generated yet 29 if ok1 == 1 { pass = pass + 1; g_p("PASS T1 GET form: fields present, zero-JS, no preview\n" as *u8) } else { g_p("FAIL T1\n" as *u8) } 30 31 // ---- T2: POST a submission -> generated banner preview (728x90 dynamic) + repopulated + copy box, zero-JS. 32 let post: *u8 = "business=Acme+Co&headline=Big+sale&body=Up+to+40%25+off&cta=Shop+now&link=https://acme.test/&size=leaderboard+728x90&theme=dark&kind=dynamic+(animated)" as *u8 33 let pn: i64 = as_len(post) 34 let g2: i64 = abb_page(post, pn, page) 35 g_write("knowledge/staging/ad/banner_builder_filled.html" as *u8, page, g2) 36 tot = tot + 1; var ok2: i64 = 1 37 if as_contains(page, g2, "width:728px" as *u8) != 1 { ok2 = 0 } // requested size honored 38 if as_contains(page, g2, "@keyframes" as *u8) != 1 { ok2 = 0 } // dynamic animation present 39 if as_contains(page, g2, "Preview" as *u8) != 1 { ok2 = 0 } // preview rendered 40 if as_contains(page, g2, "<textarea" as *u8) != 1 { ok2 = 0 } // copy-paste HTML box 41 if as_contains(page, g2, "value='Acme Co'" as *u8) != 1 { ok2 = 0 } // form repopulated (decoded) 42 if as_contains(page, g2, "<script" as *u8) != 0 { ok2 = 0 } // STILL zero-JS 43 if ok2 == 1 { pass = pass + 1; g_p("PASS T2 POST: 728x90 dynamic preview + repopulated + copy box, zero-JS\n" as *u8) } else { g_p("FAIL T2\n" as *u8) } 44 45 // ---- T3: abb_render direct -> non-empty for a real form, and EMPTY (0) when no business given. 46 let buf: *u8 = sys_mmap(16384) 47 let r1: i64 = abb_render(post, pn, buf) 48 let noform: *u8 = "headline=x" as *u8 49 let r0: i64 = abb_render(noform, as_len(noform), buf) 50 tot = tot + 1; var ok3: i64 = 1 51 if r1 <= 0 { ok3 = 0 } 52 if r0 != 0 { ok3 = 0 } // no business -> no banner (fail-closed on empty) 53 if ok3 == 1 { pass = pass + 1; g_p("PASS T3 abb_render: generates for a form, returns 0 with no business\n" as *u8) } else { g_p("FAIL T3\n" as *u8) } 54 55 // ---- T4: ESCAPING neg-control -> an injected sponsor never appears raw in the page (escaped in BOTH 56 // the repopulated form value and the generated banner). 57 let inj: *u8 = "business=<script>alert(1)</script>&headline=H&size=rectangle&kind=static" as *u8 58 let g4: i64 = abb_page(inj, as_len(inj), page) 59 tot = tot + 1; var ok4: i64 = 1 60 if as_contains(page, g4, "<script" as *u8) != 0 { ok4 = 0 } // raw injection absent 61 if as_contains(page, g4, "&lt;script" as *u8) != 1 { ok4 = 0 } // present only escaped 62 if ok4 == 1 { pass = pass + 1; g_p("PASS T4 escaping: injected sponsor stays &lt;script (no raw tag)\n" as *u8) } else { g_p("FAIL T4\n" as *u8) } 63 64 g_p("nx_ad_banner_builder_gate pass=" as *u8) 65 let nb: *u8 = sys_mmap(16); let nn: i64 = ab_uitoa(nb, 0, pass); sys_write(1, nb, nn) 66 g_p("/" as *u8); let tb: *u8 = sys_mmap(16); let tn: i64 = ab_uitoa(tb, 0, tot); sys_write(1, tb, tn) 67 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 68 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 69 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 70 let ctr__dry: *i64 = gv_ctr() 71 ctr__dry[0] = pass 72 ctr__dry[1] = tot 73 let rc__dry: i64 = gv_verdict("AD-BANNER-BUILDER-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 74 sys_exit(rc__dry) 75 return rc__dry 76}