46 lines
1.5 KiB
JavaScript
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
|