uci-wifi/src/scan.js

46 lines
1.5 KiB
JavaScript

import cmd from './cmd'
import tc from '@uci/try-catch'
async function scan(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
}
export default scan