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}