code wiki / (root) / nx_atlas_citeverify2.nx

nx_atlas_citeverify2.nx source

↩ module page · 78 lines · 3033 B

1// nx_atlas_citeverify2.nx -- atlas-hygiene MULTI-AUTHORITY CITATION FIREWALL (beyond-SOTA / Callout 1+). 2// Cross-checks a DOI against TWO independent authorities: Crossref AND OpenAlex. VERIFIED (exit 0) only if 3// BOTH return 200; QUARANTINE (exit 5) if either misses -- resilient to one authority being down or wrong, 4// which a single-source check is not. Forks the deployed nx_https_get.elf twice. license_tier: ORIGINAL expect_exit: 0 5import "nx_syscalls.nx" 6import "nx_tool_run.nx" 7const K_MAGIC_1048576: i64 = 1048576 8const K_MAGIC_1024: i64 = 1024 9func cv_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 10func cv_puts(s: *u8) -> i64 { sys_write(1, s, cv_slen(s)); return 0 } 11func cv_contains(buf: *u8, n: i64, needle: *u8) -> i64 { 12 let m: i64 = cv_slen(needle) 13 if m == 0 { return 1 } 14 var i: i64 = 0 15 while i + m <= n { 16 var k: i64 = 0 17 while k < m { if buf[i + k] != needle[k] { k = m + 9 } else { k = k + 1 } } 18 if k == m { return 1 } 19 i = i + 1 20 } 21 return 0 22} 23func cv_append(dst: *u8, di: i64, src: *u8) -> i64 { 24 var j: i64 = 0 25 var i: i64 = di 26 while src[j] != (0 as u8) { dst[i] = src[j]; i = i + 1; j = j + 1 } 27 return i 28} 29func cv_fetch(url: *u8, out: *u8, olen: *i64) -> i64 { 30 let path: *u8 = "./nx_https_get.elf" as *u8 31 let av: *i64 = sys_mmap(256) as *i64 32 av[0] = path as i64 33 av[1] = url as i64 34 av[2] = 0 35 return tr_run_capture(path, av, out, K_MAGIC_1048576, olen) 36} 37func main(argc: i64, argv: *i64) -> i64 { 38 if argc < 2 { 39 cv_puts("ATLASCITE2 ERR need doi\n" as *u8) 40 sys_exit(2) 41 return 2 42 } 43 let doi: *u8 = argv[1] as *u8 44 let curl: *u8 = sys_mmap(K_MAGIC_1024) 45 var ci: i64 = cv_append(curl, 0, "https://api.crossref.org/works/" as *u8) 46 ci = cv_append(curl, ci, doi) 47 curl[ci] = 0 as u8 48 let ourl: *u8 = sys_mmap(K_MAGIC_1024) 49 var oi: i64 = cv_append(ourl, 0, "https://api.openalex.org/works/doi:" as *u8) 50 oi = cv_append(ourl, oi, doi) 51 ourl[oi] = 0 as u8 52 let cout: *u8 = sys_mmap(K_MAGIC_1048576) 53 let colen: *i64 = sys_mmap(16) as *i64 54 let oout: *u8 = sys_mmap(K_MAGIC_1048576) 55 let oolen: *i64 = sys_mmap(16) as *i64 56 cv_fetch(curl, cout, colen) 57 cv_fetch(ourl, oout, oolen) 58 let c200: i64 = cv_contains(cout, colen[0], "200 OK" as *u8) 59 let o200: i64 = cv_contains(oout, oolen[0], "200 OK" as *u8) 60 if c200 == 1 { 61 if o200 == 1 { 62 cv_puts("ATLASCITE2 VERIFIED both-authorities crossref+openalex doi=" as *u8) 63 cv_puts(doi) 64 cv_puts("\n" as *u8) 65 sys_exit(0) 66 return 0 67 } 68 } 69 cv_puts("ATLASCITE2 QUARANTINE authority-miss doi=" as *u8) 70 cv_puts(doi) 71 cv_puts(" crossref200=" as *u8) 72 if c200 == 1 { cv_puts("Y" as *u8) } else { cv_puts("N" as *u8) } 73 cv_puts(" openalex200=" as *u8) 74 if o200 == 1 { cv_puts("Y" as *u8) } else { cv_puts("N" as *u8) } 75 cv_puts("\n" as *u8) 76 sys_exit(5) 77 return 5 78}