uci-wifi/src/scan.js

41 lines
1.5 KiB
JavaScript

import cmd from './cmd'
import tc from '@uci/try-catch'
export default async function (interf) {
let ret = null
let cmdStr = 'nmcli --terse --fields active,ssid,bssid,mode,chan,freq,signal,security,wpa-flags,rsn-flags,device device wifi list'
ret = await tc(cmd)(cmdStr)
if (ret.err) return {error: `scan failed -- ${ret.err.cmd}` }
let lines = ret.res.split('\n')
let networks = []
for (let i = 0 ; i < lines.length ; i++) {
if (lines[i] != '') {
// TODO simply the parsing
let fields = lines[i].replace(/\\:/g, '&&').split(':')
let ssid = fields[1].replace(/&&/g, ':')
let iface = fields[10].replace(/&&/g, ':')
if (ssid !== '--' && (interf ? (interf === iface) : true)) {
// if (ssid !== '--' ) {
networks.push({
active: fields[0].replace(/&&/g, ':'),
iface: iface,
ssid: ssid,
bssid: fields[2].replace(/&&/g, ':'),
mac: fields[2].replace(/&&/g, ':'), // for retrocompatibility with version 1.x
mode: fields[3].replace(/&&/g, ':'),
channel: parseInt(fields[4].replace(/&&/g, ':')),
frequency: parseInt(fields[5].replace(/&&/g, ':')),
signal_quality: Number(fields[6].replace(/&&/g, ':')),
security: fields[7].replace(/&&/g, ':') != '(none)' ? fields[7].replace(/&&/g, ':') : 'none',
security_flags: {
wpa: fields[8].replace(/&&/g, ':'),
rsn: fields[9].replace(/&&/g, ':'),
}
})
}
}
}
return networks
}