2019-06-14 18:37:14 +02:00

97 lines
3.4 KiB
JavaScript

'use strict';
// @ts-check
// ==================================================================================
// wifi.js
// ----------------------------------------------------------------------------------
// Description: System Information - library
// for Node.js
// Copyright: (c) 2014 - 2019
// Author: Sebastian Hildebrandt
// ----------------------------------------------------------------------------------
// License: MIT
// ==================================================================================
// 9. wifi
// ----------------------------------------------------------------------------------
const os = require('os');
const exec = require('child_process').exec;
const execSync = require('child_process').execSync;
const fs = require('fs');
const util = require('./util');
let _platform = process.platform;
const _linux = (_platform === 'linux');
const _darwin = (_platform === 'darwin');
const _windows = (_platform === 'win32');
const _freebsd = (_platform === 'freebsd');
const _openbsd = (_platform === 'openbsd');
const _netbsd = (_platform === 'netbsd');
const _sunos = (_platform === 'sunos');
function wifiDBFromQuality(quality) {
return (parseFloat(quality) / 2 - 100);
}
function wifiQualityFromDB(db) {
return 2 * (parseFloat(db) + 100);
}
function wifi(callback) {
return new Promise((resolve) => {
process.nextTick(() => {
let result = [];
if (_linux) {
let cmd = 'nmcli --terse --fields active,ssid,bssid,mode,chan,freq,signal,security,wpa-flags,rsn-flags device wifi list';
exec(cmd, { maxBuffer: 1024 * 2000 }, function (error, stdout) {
const parts = stdout.toString().split('ACTIVE:');
parts.shift();
parts.forEach(part => {
part = 'ACTIVE:' + part;
const lines = part.split(os.EOL);
const channel = util.getValue(lines, 'CHAN');
const frequency = util.getValue(lines, 'FREQ').toLowerCase().replace('mhz', '').trim()
const security = util.getValue(lines, 'SECURITY').replace('(', '').replace(')', '')
const wpaFlags = util.getValue(lines, 'WPA-FLAGS').replace('(', '').replace(')', '')
const rsnFlags = util.getValue(lines, 'RSN-FLAGS').replace('(', '').replace(')', '')
result.push({
ssid: util.getValue(lines, 'SSID'),
bssid: util.getValue(lines, 'BSSID'),
mode: util.getValue(lines, 'MODE'),
channel: channel ? parseInt(channel, 10) : -1,
frequency: frequency ? parseInt(frequency, 10) : -1,
signalLevel: wifiDBFromQuality(util.getValue(lines, 'SIGNAL')),
quality: parseFloat(util.getValue(lines, 'SIGNAL')),
security: security && security !== 'none' ? security.split(' ') : [],
wpaFlags: wpaFlags && wpaFlags !== 'none' ? wpaFlags.split(' ') : [],
rsnFlags: rsnFlags && rsnFlags !== 'none' ? rsnFlags.split(' ') : []
})
})
if (callback) {
callback(result);
}
resolve(result);
});
} else if (_darwinx) {
let cmd = '';
exec(cmd, { maxBuffer: 1024 * 2000 }, function (error, stdout) {
if (callback) {
callback(result);
}
resolve(result);
});
} else {
if (callback) {
callback(result);
}
resolve(result);
}
});
});
}
exports.wifi = wifi;