wifi-setup
Version:
WiFi AP setup, particularly useful for IoT devices
92 lines (90 loc) • 10.8 kB
JavaScript
;
var os = require('os');
if (!os.homedir) {
os.homedir = function () {
return process.env.HOME;
};
}
var nedb = require('nedb');
var db = {
credentials: undefined
};
var Promise = require('bluebird');
Promise.onPossiblyUnhandledRejection(function (error) {
throw error;
});
module.exports = function (SERVICE_NAME) {
var database = {
init: function () {
return new Promise(function (resolve) {
var path;
switch (process.platform) {
case 'darwin':
path = os.homedir() + ("/Library/Application Support/" + SERVICE_NAME + "/wifi-setup");
break;
case 'linux':
path = os.homedir() + ("/usr/local/share/" + SERVICE_NAME + "/wifi-setup");
break;
case 'win32':
path = os.homedir() + ("/AppData/Local/" + SERVICE_NAME + "/wifi-setup");
break;
default:
path = os.homedir() + ("/usr/local/share/" + SERVICE_NAME + "/wifi-setup");
}
for (var i in db) {
db[i] = new nedb({ filename: path + "/" + i });
}
resolve();
});
},
start: function () {
return new Promise(function (resolve, reject) {
db.credentials.loadDatabase(function (err) {
if (err) {
console.log(err);
reject(err);
}
else {
console.log('Database loaded successfully');
resolve();
}
});
});
},
stop: function () {
return new Promise(function (resolve) {
resolve();
});
},
getWifiCreds: function () {
return new Promise(function (resolve, reject) {
db.credentials.findOne({}, function (err, creds) {
if (err || !creds) {
console.log(err);
reject(err);
}
else {
resolve(creds);
}
});
});
},
setWifiCreds: function (SSID, password) {
return new Promise(function (resolve, reject) {
db.credentials.remove({}, { multi: true }, function () {
db.credentials.insert({ SSID: SSID, password: password }, function (err) {
if (err) {
reject(err);
}
else {
db.credentials.persistence.compactDatafile();
resolve();
}
});
});
});
}
};
return database;
};
//# sourceMappingURL=data:application/json;base64,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QUM7QUFDcEIsQ0FBQyxDQUFDIiwiZmlsZSI6Im1vZHVsZXMvZGF0YWJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBvcyA9IHJlcXVpcmUoJ29zJyk7XG5pZiAoIW9zLmhvbWVkaXIpIHtcbiAgICBvcy5ob21lZGlyID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuSE9NRTtcbiAgICB9O1xufVxudmFyIG5lZGIgPSByZXF1aXJlKCduZWRiJyk7XG52YXIgZGIgPSB7XG4gICAgY3JlZGVudGlhbHM6IHVuZGVmaW5lZFxufTtcblxuaW1wb3J0ICogYXMgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5Qcm9taXNlLm9uUG9zc2libHlVbmhhbmRsZWRSZWplY3Rpb24oKGVycm9yKSA9PiB7XG4gICAgdGhyb3cgZXJyb3I7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSAoU0VSVklDRV9OQU1FKSA9PiB7XG4gICAgdmFyIGRhdGFiYXNlID0ge1xuICAgICAgICBpbml0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgcGF0aDtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGFyd2luJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5ob21lZGlyKCkgKyBgL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC8ke1NFUlZJQ0VfTkFNRX0vd2lmaS1zZXR1cGA7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGludXgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLmhvbWVkaXIoKSArIGAvdXNyL2xvY2FsL3NoYXJlLyR7U0VSVklDRV9OQU1FfS93aWZpLXNldHVwYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd3aW4zMic6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MuaG9tZWRpcigpICsgYC9BcHBEYXRhL0xvY2FsLyR7U0VSVklDRV9OQU1FfS93aWZpLXNldHVwYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLmhvbWVkaXIoKSArIGAvdXNyL2xvY2FsL3NoYXJlLyR7U0VSVklDRV9OQU1FfS93aWZpLXNldHVwYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBkYikge1xuICAgICAgICAgICAgICAgICAgICBkYltpXSA9IG5ldyBuZWRiKHtmaWxlbmFtZTogYCR7cGF0aH0vJHtpfWB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RhcnQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZGIuY3JlZGVudGlhbHMubG9hZERhdGFiYXNlKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RhdGFiYXNlIGxvYWRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0b3A6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFdpZmlDcmVkczogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBkYi5jcmVkZW50aWFscy5maW5kT25lKHt9LCAoZXJyLCBjcmVkcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIHx8ICFjcmVkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjcmVkcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRXaWZpQ3JlZHM6IChTU0lELCBwYXNzd29yZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBkYi5jcmVkZW50aWFscy5yZW1vdmUoe30sIHttdWx0aTogdHJ1ZX0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGIuY3JlZGVudGlhbHMuaW5zZXJ0KHtTU0lEOiBTU0lELCBwYXNzd29yZDogcGFzc3dvcmR9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNyZWRlbnRpYWxzLnBlcnNpc3RlbmNlLmNvbXBhY3REYXRhZmlsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZGF0YWJhc2U7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9