From d43172cd4adcb591b0762466ba559ecbcbb1693b Mon Sep 17 00:00:00 2001
From: vortex
Date: Sun, 4 Aug 2024 00:22:11 +0200
Subject: [PATCH] adds WIP WASM JS query function
---
golang/wasm/pure.js | 435 +++++++++++++++++++++++++++++++++++++
golang/wasm/wasm_exec.html | 11 +-
2 files changed, 445 insertions(+), 1 deletion(-)
diff --git a/golang/wasm/pure.js b/golang/wasm/pure.js
index ae28bc2..f431602 100644
--- a/golang/wasm/pure.js
+++ b/golang/wasm/pure.js
@@ -211,3 +211,438 @@ async function findDOHEndpoint() {
return
}
+const DNS_RCODE = [
+ "NoErr", // 0
+ "FormErr", // 1
+ "ServFail", // 2
+ "NXDomain",
+ "NotImp",
+ "Refused",
+ "YXDomain",
+ "YXRRSet",
+ "NXRRSet",
+ "NotAuth",
+ "NotZone",
+ "DSOTYPENI",
+ "Unassigned", // 12
+ "Unassigned",
+ "Unassigned",
+ "Unassigned",
+ "BADVERS",
+ "BADSIG",
+ "BADKEY",
+ "BADTIME",
+ "BADMODE",
+ "BADALG",
+ "BADTRUNK",
+ "BADCOOKIE", // 23
+]
+
+const DNS_RRTYPE = [
+ "Reserved", // 0
+ "A", // 1
+ "NS", // 2
+ "MD",
+ "MF",
+ "CNAME",
+ "SOA", // 6
+ "MB",
+ "MG",
+ "MR",
+ "NULL",
+ "WKS",
+ "PTR", // 12
+ "HINFO",
+ "MINFO",
+ "MX",
+ "TXT",
+ "RP",
+ "AFSDB",
+ "X25",
+ "ISDN",
+ "RT",
+ "NSAP",
+ "NSAP-PTR",
+ "SIG", // 24
+ "KEY", // 25
+ "PX",
+ "GPOS",
+ "AAAA", // 28
+ "LOC", // 29
+ "NXT",
+ "EID",
+ "NIMLOC",
+ "SRV", // 33
+ "ATMA",
+ "NAPTR",
+ "KX",
+ "CERT",
+ "A6",
+ "DNAME",
+ "SINK",
+ "OPT",
+ "APL",
+ "DS",
+ "SSHFP", // 44
+ "IPSECKEY",
+ "RRSIG", // 46
+ "NSEC", // 47
+ "DNSKEY", // 48
+ "DHCID",
+ "NSEC3", // 50
+ "NSEC3PARAM",
+ "TLSA", // 52
+ "SMIMEA",
+ "Unassigned",
+ "HIP",
+ "NINFO",
+ "RKEY",
+ "TALINK",
+ "CDS", // 59
+ "CDNSKEY", // 60
+ "OPENPGPKEY", // 61
+ "CSYNC", // 62
+ "ZONEMD", // 63
+ "SVCB", // 64
+ "HTTPS", // 65
+ "Unassigned", // 66
+ "Unassigned", // 67
+ "Unassigned", // 68
+ "Unassigned", // 69
+ "Unassigned", // 70
+ "Unassigned", // 71
+ "Unassigned", // 72
+ "Unassigned", // 73
+ "Unassigned", // 74
+ "Unassigned", // 75
+ "Unassigned", // 76
+ "Unassigned", // 77
+ "Unassigned", // 78
+ "Unassigned", // 79
+ "Unassigned", // 80
+ "Unassigned", // 81
+ "Unassigned", // 82
+ "Unassigned", // 83
+ "Unassigned", // 84
+ "Unassigned", // 85
+ "Unassigned", // 86
+ "Unassigned", // 87
+ "Unassigned", // 88
+ "Unassigned", // 89
+ "Unassigned", // 90
+ "Unassigned", // 91
+ "Unassigned", // 92
+ "Unassigned", // 93
+ "Unassigned", // 94
+ "Unassigned", // 95
+ "Unassigned", // 96
+ "Unassigned", // 97
+ "Unassigned", // 98
+ "SPF",
+ "UINFO",
+ "UID",
+ "GID",
+ "UNSPEC",
+ "NID",
+ "L32",
+ "L64",
+ "LP",
+ "EUI48",
+ "EUI64", // 109
+ "Unassigned", // 110
+ "Unassigned", // 111
+ "Unassigned", // 112
+ "Unassigned", // 113
+ "Unassigned", // 114
+ "Unassigned", // 115
+ "Unassigned", // 116
+ "Unassigned", // 117
+ "Unassigned", // 118
+ "Unassigned", // 119
+ "Unassigned", // 120
+ "Unassigned", // 121
+ "Unassigned", // 122
+ "Unassigned", // 123
+ "Unassigned", // 124
+ "Unassigned", // 125
+ "Unassigned", // 126
+ "Unassigned", // 127
+ "NXNAME", // 128
+ "Unassigned", // 129
+ "Unassigned", // 130
+ "Unassigned", // 131
+ "Unassigned", // 132
+ "Unassigned", // 133
+ "Unassigned", // 134
+ "Unassigned", // 135
+ "Unassigned", // 136
+ "Unassigned", // 137
+ "Unassigned", // 138
+ "Unassigned", // 139
+ "Unassigned", // 140
+ "Unassigned", // 141
+ "Unassigned", // 142
+ "Unassigned", // 143
+ "Unassigned", // 144
+ "Unassigned", // 145
+ "Unassigned", // 146
+ "Unassigned", // 147
+ "Unassigned", // 148
+ "Unassigned", // 149
+ "Unassigned", // 150
+ "Unassigned", // 151
+ "Unassigned", // 152
+ "Unassigned", // 153
+ "Unassigned", // 154
+ "Unassigned", // 155
+ "Unassigned", // 156
+ "Unassigned", // 157
+ "Unassigned", // 158
+ "Unassigned", // 159
+ "Unassigned", // 160
+ "Unassigned", // 161
+ "Unassigned", // 162
+ "Unassigned", // 163
+ "Unassigned", // 164
+ "Unassigned", // 165
+ "Unassigned", // 166
+ "Unassigned", // 167
+ "Unassigned", // 168
+ "Unassigned", // 169
+ "Unassigned", // 170
+ "Unassigned", // 171
+ "Unassigned", // 172
+ "Unassigned", // 173
+ "Unassigned", // 174
+ "Unassigned", // 175
+ "Unassigned", // 176
+ "Unassigned", // 177
+ "Unassigned", // 178
+ "Unassigned", // 179
+ "Unassigned", // 180
+ "Unassigned", // 181
+ "Unassigned", // 182
+ "Unassigned", // 183
+ "Unassigned", // 184
+ "Unassigned", // 185
+ "Unassigned", // 186
+ "Unassigned", // 187
+ "Unassigned", // 188
+ "Unassigned", // 189
+ "Unassigned", // 190
+ "Unassigned", // 191
+ "Unassigned", // 192
+ "Unassigned", // 193
+ "Unassigned", // 194
+ "Unassigned", // 195
+ "Unassigned", // 196
+ "Unassigned", // 197
+ "Unassigned", // 198
+ "Unassigned", // 199
+ "Unassigned", // 200
+ "Unassigned", // 201
+ "Unassigned", // 202
+ "Unassigned", // 203
+ "Unassigned", // 204
+ "Unassigned", // 205
+ "Unassigned", // 206
+ "Unassigned", // 207
+ "Unassigned", // 208
+ "Unassigned", // 209
+ "Unassigned", // 210
+ "Unassigned", // 211
+ "Unassigned", // 212
+ "Unassigned", // 213
+ "Unassigned", // 214
+ "Unassigned", // 215
+ "Unassigned", // 216
+ "Unassigned", // 217
+ "Unassigned", // 218
+ "Unassigned", // 219
+ "Unassigned", // 220
+ "Unassigned", // 221
+ "Unassigned", // 222
+ "Unassigned", // 223
+ "Unassigned", // 224
+ "Unassigned", // 225
+ "Unassigned", // 226
+ "Unassigned", // 227
+ "Unassigned", // 228
+ "Unassigned", // 229
+ "Unassigned", // 230
+ "Unassigned", // 231
+ "Unassigned", // 232
+ "Unassigned", // 233
+ "Unassigned", // 234
+ "Unassigned", // 235
+ "Unassigned", // 236
+ "Unassigned", // 237
+ "Unassigned", // 238
+ "Unassigned", // 239
+ "Unassigned", // 240
+ "Unassigned", // 241
+ "Unassigned", // 242
+ "Unassigned", // 243
+ "Unassigned", // 244
+ "Unassigned", // 245
+ "Unassigned", // 246
+ "Unassigned", // 247
+ "Unassigned", // 248
+ "TKEY", // 249
+ "TSIG", // 250
+ "IXFR",
+ "AXFR",
+ "MAILA",
+ "MAILB",
+ "ANY", // 255
+ "URI", // 256
+ "CAA", // 257
+ "AVC", // 258
+ "DOA", // 259
+ "AMRELAY", // 260
+ "RESINFO", // 261
+ "WALLET", // 262
+ "CLA", // 263
+ "IPN", // 264
+]
+
+const DNS_CLASS = [
+ "Reserved", // 0
+ "IN", // 1
+ "Unassigned", // 2
+ "Chaos", // 3
+ "Hesiod", // 4
+// NOT CURRENTLY SUPPORTED
+// "QCLASS NONE", // 254
+// "QCLASS * (ANY)", // 255
+]
+
+
+// query()
+// for a given name and RR type, return dns response
+async function queryRaw() {
+ // set query question name
+ var dohQName = document.getElementById("query-name").value
+
+ // DEBUG
+ if (dohQName == "") {
+ dohQName = "zenr.io"
+ }
+
+ if (! dohQName.endsWith('.')) {
+ dohQName = dohQName + '.'
+ }
+
+ // set query question RR type
+ var dohQType = document.getElementById("query-type").value
+ if (dohQType == "") {
+ dohQType = 'A'
+ }
+
+ const pre = document.getElementById("query-result")
+ if (pre.children.length > 0) {
+ pre.removeChild(pre.children[0])
+ }
+
+ const ul = document.createElement("ul")
+
+ const dohQuery = window.goFuncs.query
+ result = await dohQuery(dohQName, dohQType)
+
+ const resultJson = JSON.parse(result)
+
+ // map rcode integer to standard text
+ rcodeObj = resultJson.Rcode
+ if (typeof rcodeObj == "number") {
+ if (rcodeObj < DNS_RCODE.length) {
+ rcodeObj = DNS_RCODE[rcodeObj]
+ } else {
+ rcodeObj = "Unassigned"
+ }
+ }
+ resultJson.Rcode = rcodeObj
+
+ resultJson.Question.forEach(question => {
+ if (typeof question.Qtype == "number") {
+ if (question.Qtype < DNS_RRTYPE.length) {
+ question.Qtype = DNS_RRTYPE[question.Qtype]
+ } else {
+ question.Qtype = "Unassigned"
+ }
+ }
+
+ if (typeof question.Qclass == "number") {
+ if (question.Qclass < DNS_CLASS.length) {
+ question.Qclass = DNS_CLASS[question.Qclass]
+ } else {
+ question.Qclass = "Unassigned"
+ }
+ }
+
+ })
+
+ if (resultJson.Answer != null) {
+ console.log("This response has Answer array length of ", resultJson.Answer.length)
+
+ resultJson.Answer.forEach(answer => {
+ console.log("Answer:", answer)
+
+ if (typeof answer.Hdr.Rrtype == "number") {
+ if (answer.Hdr.Rrtype < DNS_RRTYPE.length) {
+ answer.Hdr.Rrtype = DNS_RRTYPE[answer.Hdr.Rrtype]
+ } else {
+ answer.Hdr.Rrtype = "Unassigned"
+ }
+ }
+
+ if (typeof answer.Hdr.Class == "number") {
+ if (answer.Hdr.Class < DNS_CLASS.length) {
+ answer.Hdr.Class = DNS_CLASS[answer.Hdr.Class]
+ } else {
+ answer.Hdr.Class = "Unassigned"
+ }
+ }
+
+
+ })
+ } else {
+ console.log("This response has null as Answer property")
+ }
+
+ const raw = document.createElement("li")
+ raw.innerHTML = JSON.stringify(resultJson, null, 4)
+ ul.appendChild(raw)
+
+
+ // const qname = document.createElement("li")
+ // qname.innerHTML = `Question RR Name: ${resultJson.Question[0].Name}`
+ // ul.appendChild(qname)
+
+ // const qtype = document.createElement("li")
+ // qtype.innerHTML = `Question RR Type: ${resultJson.Question[0].Qtype}`
+ // ul.appendChild(qtype)
+
+ // const qclass = document.createElement("li")
+ // qclass.innerHTML = `Question RR Class: ${resultJson.Question[0].Qclass}`
+ // ul.appendChild(qclass)
+
+ // if (!(resultJson.Answer == null)) {
+ // resultJson.Answer.forEach(answer => {
+ // const an = document.createElement('li')
+ // an.innerHTML = `Answer RR Name: ${answer.Hdr.Name}`
+ // ul.appendChild(an)
+
+ // const at = document.createElement('li')
+ // at.innerHTML = `Answer RR Type: ${answer.Hdr.Rrtype}`
+ // ul.appendChild(at)
+
+ // const ac = document.createElement('li')
+ // ac.innerHTML = `Answer RR Class: ${answer.Hdr.Class}`
+ // ul.appendChild(ac)
+ // })
+ // }
+
+ pre.appendChild(ul)
+
+ return
+}
diff --git a/golang/wasm/wasm_exec.html b/golang/wasm/wasm_exec.html
index 19debfd..8e0b3a9 100644
--- a/golang/wasm/wasm_exec.html
+++ b/golang/wasm/wasm_exec.html
@@ -6,6 +6,15 @@
+ DNS
+ DOH Resolver
+
+
+
+
+
+
+
DNS Keys
List Keystore
@@ -17,7 +26,7 @@ Request
-
+
Search Keystore for Key to sign update for a given Subdomain