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