wifi-manager
Version:
A node module for querying and managing wifi networks on Archlinux
128 lines (112 loc) • 4.11 kB
JavaScript
var async = require("async")
var iplink = require("./iplink")
var iwconfig = require("./iwconfig")
var ifconfig = require("./ifconfig")
var iwlist = require("./iwlist")
var netctl = require('./netctl')
/*****************************************************************************\
Return a set of functions which we can use to manage and check our wifi
connection information
\*****************************************************************************/
module.exports = {
get_wifi_interface: _get_wifi_interface,
get_wifi_info: _get_wifi_info,
restart_interface: _restart_interface,
scan_networks: _scan_networks,
is_wifi_enabled: _is_wifi_enabled,
is_wifi_connected: _is_wifi_connected,
save_profile: _save_profile,
delete_profile: _delete_profile,
is_profile_saved: _is_profile_saved,
enable_wifi: _enable_wifi,
disable_wifi: _disable_wifi
}
function _get_wifi_interface(callback) {
iwconfig.get_interface(callback)
}
// Get generic info on an interface
function _get_wifi_info(wifi_interface, callback) {
var output = []
async.series([
function run_ifconfig(next_step) {
ifconfig.status(wifi_interface, function (error, info) {
if (!error) output.concat(info);
next_step(error);
})
},
function run_iwconfig(next_step) {
iwconfig.status(wifi_interface, function (error, info) {
if (!error) output.concat(info);
next_step(error);
})
},
], function(error) {
return callback(error, output)
})
}
function _restart_interface(wifi_interface, callback) {
iplink.restart(wifi_interface, callback)
}
function _scan_networks(wifi_interface, callback) {
iwlist(wifi_interface, callback)
}
function _is_wifi_enabled(wifi_interface, callback) {
netctl.is_auto_enabled(wifi_interface, callback)
}
function _is_wifi_connected(wifi_interface, callback) {
get_wifi_info(wifi_interface, function(error, info) {
if (error) return callback(error, null)
var return_info = null;
if ("<unknown>" != info["inet_addr"] &&
"<unknown>" == info["unassociated"]) {
return_info = info["inet_addr"]
}
return callback(null, return_info)
})
}
function _save_profile(wifi_interface, connection_info, callback) {
async.series([
function save_wifi_profile(next_step) {
netctl.save_wifi_profile(wifi_interface, connection_info, next_step)
},
function restart_netctl_auto(next_step) {
netctl.restart_auto(wifi_interface, next_step)
}
], callback)
}
function _delete_profile(wifi_interface, ssid, callback) {
async.series([
function delete_wifi_profile(next_step) {
netctl.delete_wifi_profile(wifi_interface, connection_info.wifi_ssid, next_step)
},
function restart_netctl_auto(next_step) {
netctl.restart_auto(wifi_interface, next_step)
}
], callback)
}
function _is_profile_saved(wifi_interface, ssid, callback) {
netctl.is_wifi_profile_saved(wifi_interface, ssid, callback)
}
function _enable_wifi(wifi_interface, callback) {
async.series([
function restart_netctl_auto(next_step) {
netctl.restart_auto(wifi_interface, next_step)
},
function restart_network_interface(next_step) {
restart_network_interface(wifi_interface, next_step)
},
function enable_netctl_auto(next_step) {
netctl.enable_auto(wifi_interface, next_step)
}
], callback)
}
function _disable_wifi(wifi_interface, callback) {
async.series([
function stop_netctl_auto(next_step) {
netctl.stop_auto(wifi_interface, next_step)
},
function disable_netctl_auto(next_step) {
netctl.disable_auto(wifi_interface, next_step)
}
], callback)
}