code wiki / wiki / nx_wiki_login_flow_test.nx

nx_wiki_login_flow_test.nx source

↩ module page · 64 lines · 2796 B

1// Handler-level proof of the V1 no-cookie admin HTTP login (no live daemon). 2// Closes T#login-not-wired-to-http: proves nx_wlogin_admin_handle does 3// POST-login->200+X-Nishi-Session and gate->200/401 over the wlogin path. 4// main() returns 0 on all-pass, else the failing assertion number. 5// resp[9] is the first status digit ("HTTP/1.1 2.." -> '2'=0x32, '4'=0x34). 6import "nx_wiki_login_flow.nx" 7 8func main() -> i64 { 9 let priv: *u8 = sys_mmap(32) 10 let pub: *u8 = sys_mmap(32) 11 let phash: *u8 = sys_mmap(32) 12 var i: i64 = 0 13 while i < 32 { priv[i] = (i + 9) as u8; i = i + 1 } 14 if ed25519_pub_from_priv(priv, pub) != 0 { return 10 } 15 16 let pass: *u8 = "correct-horse-battery-staple" as *u8 17 let pass_n: i64 = 28 18 sha256_digest(pass, pass_n, phash) 19 let wrong: *u8 = "wrong-passphrase" as *u8 20 let wrong_n: i64 = 16 21 let realm: *u8 = "nishifamily-admin" as *u8 22 let realm_n: i64 = 17 23 let handle: *u8 = "admin" as *u8 24 let handle_n: i64 = 5 25 let now: i64 = 1000 26 27 let auth: *NxWloginAuth = (sys_mmap(64)) as *NxWloginAuth 28 if nx_wlogin_auth_init(auth, priv, pub, phash, realm, realm_n, handle, handle_n) != NX_WLOGIN_OK { return 11 } 29 30 let resp: *u8 = sys_mmap(4096) 31 let rn: *i64 = (sys_mmap(8)) as *i64 32 let zero: *u8 = (0 as i64) as *u8 33 34 // 1. POST login, CORRECT passphrase -> 200 35 if nx_wlogin_admin_handle(auth, 1, pass, pass_n, zero, 0, now, 900, resp, 4096, rn) != NX_WLOGIN_OK { return 20 } 36 if resp[9] != (0x32 as u8) { return 21 } 37 38 // 2. POST login, WRONG passphrase -> 401 39 if nx_wlogin_admin_handle(auth, 1, wrong, wrong_n, zero, 0, now, 900, resp, 4096, rn) != NX_WLOGIN_OK { return 22 } 40 if resp[9] != (0x34 as u8) { return 23 } 41 42 // Mint + base64 a real token for the gate tests. 43 let token: *u8 = sys_mmap(152) 44 if nx_wlogin_login(pass, pass_n, phash, priv, realm, realm_n, handle, handle_n, now, 900, token) != NX_WLOGIN_OK { return 24 } 45 let b64: *u8 = sys_mmap(256) 46 let b64n: i64 = b64_encode(token, 152, b64) 47 48 // 3. GET gated, VALID X-Nishi-Session -> 200 49 if nx_wlogin_admin_handle(auth, 0, zero, 0, b64, b64n, now, 900, resp, 4096, rn) != NX_WLOGIN_OK { return 25 } 50 if resp[9] != (0x32 as u8) { return 26 } 51 52 // 4. GET gated, NO session header -> 401 53 if nx_wlogin_admin_handle(auth, 0, zero, 0, zero, 0, now, 900, resp, 4096, rn) != NX_WLOGIN_OK { return 27 } 54 if resp[9] != (0x34 as u8) { return 28 } 55 56 // 5. GET gated, TAMPERED token -> 401 57 token[10] = (token[10] + 1) as u8 58 let b64b: *u8 = sys_mmap(256) 59 let b64bn: i64 = b64_encode(token, 152, b64b) 60 if nx_wlogin_admin_handle(auth, 0, zero, 0, b64b, b64bn, now, 900, resp, 4096, rn) != NX_WLOGIN_OK { return 29 } 61 if resp[9] != (0x34 as u8) { return 30 } 62 63 return 0 64}