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