38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
// Parses blob-network-qr output: a "meta\t<iface>\t<security>\t<ssid>"
|
|
// header, then a square 0/1 module matrix. The SSID sits last so it may
|
|
// contain tabs. A malformed matrix returns empty rather than rendering a
|
|
// code that cannot scan.
|
|
function parseQrOutput(raw) {
|
|
var lines = String(raw || "").trim().split(/\r?\n/).filter(function(line) { return line !== "" })
|
|
var meta = { iface: "", security: "", ssid: "" }
|
|
|
|
if (lines.length > 0 && lines[0].indexOf("meta\t") === 0) {
|
|
var fields = lines.shift().split("\t")
|
|
meta.iface = fields[1] || ""
|
|
meta.security = fields[2] || ""
|
|
meta.ssid = fields.slice(3).join("\t")
|
|
}
|
|
|
|
return { meta: meta, matrix: parseQrMatrix(lines) }
|
|
}
|
|
|
|
function parseQrMatrix(lines) {
|
|
if (lines.length === 0) return { rows: [], size: 0 }
|
|
|
|
var size = lines[0].length
|
|
if (size !== lines.length) return { rows: [], size: 0 }
|
|
|
|
for (var i = 0; i < lines.length; i++) {
|
|
if (lines[i].length !== size || !/^[01]+$/.test(lines[i])) return { rows: [], size: 0 }
|
|
}
|
|
|
|
return { rows: lines, size: size }
|
|
}
|
|
|
|
if (typeof module !== "undefined") {
|
|
module.exports = {
|
|
parseQrOutput: parseQrOutput,
|
|
parseQrMatrix: parseQrMatrix
|
|
}
|
|
}
|