174 lines
5.8 KiB
JavaScript
174 lines
5.8 KiB
JavaScript
const child_process = require('child_process');
|
|
const execSync = child_process.execSync;
|
|
|
|
const _consoleColorCodes = {
|
|
Reset: "\x1b[0m",
|
|
Bright: "\x1b[1m",
|
|
Dim: "\x1b[2m",
|
|
Underscore: "\x1b[4m",
|
|
Blink: "\x1b[5m",
|
|
Reverse: "\x1b[7m",
|
|
Hidden: "\x1b[8m",
|
|
|
|
FgBlack: "\x1b[30m",
|
|
FgRed: "\x1b[31m",
|
|
FgGreen: "\x1b[32m",
|
|
FgYellow: "\x1b[33m",
|
|
FgBlue: "\x1b[34m",
|
|
FgMagenta: "\x1b[35m",
|
|
FgCyan: "\x1b[36m",
|
|
FgWhite: "\x1b[37m",
|
|
|
|
BgBlack: "\x1b[40m",
|
|
BgRed: "\x1b[41m",
|
|
BgGreen: "\x1b[42m",
|
|
BgYellow: "\x1b[43m",
|
|
BgBlue: "\x1b[44m",
|
|
BgMagenta: "\x1b[45m",
|
|
BgCyan: "\x1b[46m",
|
|
BgWhite: "\x1b[47m",
|
|
}
|
|
|
|
function Utils() {
|
|
this.consoleColorCodes = _consoleColorCodes;
|
|
}
|
|
|
|
Utils.prototype.isCurrentUserRoot = function () {
|
|
return process.getuid() == 0; // UID 0 is always root
|
|
}
|
|
|
|
Utils.prototype.printWelcomeMessage = function () {
|
|
console.log("###################################")
|
|
console.log("##### RaspiWiFi Intial Setup #####")
|
|
console.log("###################################")
|
|
}
|
|
|
|
Utils.prototype.printSetupCanceledMessage = function () {
|
|
console.log("")
|
|
console.log("")
|
|
console.log("===================================================")
|
|
console.log("---------------------------------------------------")
|
|
console.log("")
|
|
console.log("RaspiWiFi installation cancelled. Nothing changed...")
|
|
console.log("")
|
|
console.log("---------------------------------------------------")
|
|
console.log("===================================================")
|
|
console.log("")
|
|
console.log("")
|
|
}
|
|
|
|
Utils.prototype.printFinishedMessage = function () {
|
|
console.log("")
|
|
console.log("")
|
|
console.log("#####################################")
|
|
console.log("##### RaspiWiFi Setup Complete #####")
|
|
console.log("#####################################")
|
|
console.log("")
|
|
console.log("")
|
|
}
|
|
|
|
Utils.prototype.checkForYN = function (input) {
|
|
if (input.toLowerCase() !== 'y' && input.toLowerCase() !== 'n') {
|
|
this.printColor(this.consoleColorCodes.FgRed, 'Please enter y or n!');
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
Utils.prototype.printColor = function (color, ...args) {
|
|
console.log(color, ...args, this.consoleColorCodes.Reset);
|
|
}
|
|
|
|
Utils.prototype.clearConsole = () => {
|
|
//process.stdout.write('\033c');
|
|
process.stdout.write('\x1bc');
|
|
}
|
|
|
|
Utils.prototype.installSystemDependencies = function () {
|
|
this.clearConsole();
|
|
execSync('apt update');
|
|
this.clearConsole();
|
|
execSync('apt install python3 python3-rpi.gpio python3-pip dnsmasq hostapd -y')
|
|
}
|
|
|
|
Utils.prototype.copyConfigs = function (isWpaEabled) {
|
|
/* Creating application directories */
|
|
this.printColor(null, 'Creating application directories');
|
|
execSync('mkdir /usr/lib/raspiwifi');
|
|
execSync('mkdir /etc/raspiwifi');
|
|
execSync('mkdir /etc/cron.raspiwifi');
|
|
|
|
/* Copy application files */
|
|
this.printColor(null, 'Copy application files');
|
|
execSync('cp -a libs/* /usr/lib/raspiwifi/');
|
|
|
|
/* Backing up current files */
|
|
this.printColor(null, 'Backing up current files');
|
|
execSync('mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.original');
|
|
execSync('mv /etc/dnsmasq.conf /etc/dnsmasq.conf.original');
|
|
execSync('mv /etc/dhcpcd.conf /etc/dhcpcd.conf.original');
|
|
|
|
/* Copy default files for basic device setup*/
|
|
this.printColor(null, 'Copy default files for basic device setup');
|
|
execSync('cp /usr/lib/raspiwifi/reset_device/static_files/dnsmasq.conf /etc/');
|
|
execSync('cp /usr/lib/raspiwifi/reset_device/static_files/dhcpcd.conf /etc/');
|
|
if (isWpaEabled)
|
|
execSync('cp /usr/lib/raspiwifi/reset_device/static_files/hostapd.conf.wpa /etc/hostapd/hostapd.conf');
|
|
else
|
|
execSync('cp /usr/lib/raspiwifi/reset_device/static_files/hostapd.conf.nowpa /etc/hostapd/hostapd.conf');
|
|
|
|
execSync('cp /usr/lib/raspiwifi/reset_device/static_files/aphost_bootstrapper /etc/cron.raspiwifi')
|
|
execSync('chmod +x /etc/cron.raspiwifi/aphost_bootstrapper');
|
|
|
|
execSync('mv /usr/lib/raspiwifi/reset_device/static_files/raspiwifi.conf /etc/raspiwifi');
|
|
|
|
/* TODO: Setting up CRON for running monitoring jobs */
|
|
this.printColor(null, 'Setting up CRON for running monitoring jobs');
|
|
execSync('echo "# RaspiWiFi Startup" >> /etc/crontab');
|
|
execSync('echo "@reboot root run-parts /etc/cron.raspiwifi/" >> /etc/crontab');
|
|
|
|
/* Finishing things up */
|
|
this.printColor(null, 'Finishing things up');
|
|
execSync('touch /etc/raspiwifi/host_mode');
|
|
}
|
|
|
|
Utils.prototype.updateMainConfigFile = function ({ ssid, autoConfig, autoConfigDelay, sslEnabled, serverPort, wpaEnabled, wpaSecret }) {
|
|
console.log(this);
|
|
const outputString = this.serializeMainConfigFile({ ssid, autoConfig, autoConfigDelay, sslEnabled, serverPort, wpaEnabled, wpaSecret });
|
|
const fileName = '/etc/raspiwifi/raspiwifi.conf'
|
|
execSync('cat <<EOF >' + fileName + '\n' + outputString)
|
|
|
|
}
|
|
|
|
Utils.prototype.reboot = function () {
|
|
execSync('reboot');
|
|
}
|
|
|
|
Utils.prototype.serializeMainConfigFile = function ({ ssid, autoConfig, autoConfigDelay, sslEnabled, serverPort, wpaEnabled, wpaSecret }) {
|
|
const output = {
|
|
'SSID': ssid,
|
|
'AutoReconfig': autoConfig,
|
|
'AutoReconfigDelay': autoConfigDelay,
|
|
'SSLEnabled': sslEnabled,
|
|
'ServerPort': serverPort,
|
|
'WPAEnabled': wpaEnabled,
|
|
'PSK': wpaSecret ?? '',
|
|
}
|
|
return JSON.stringify(output, null, 2);
|
|
}
|
|
|
|
Utils.prototype.deserializeMainConfigFile = (input) => {
|
|
const obj = JSON.parse(input);
|
|
return {
|
|
ssid: obj['SSID'],
|
|
autoConfig: obj['AutoReconfig'],
|
|
autoConfigDelay: obj['AutoReconfigDelay'],
|
|
sslEnabled: obj['SSLEnabled'],
|
|
serverPort: obj['ServerPort'],
|
|
wpaEnabled: obj['WPAEnabled'],
|
|
wpaSecret: obj['PSK'] ?? '',
|
|
}
|
|
}
|
|
|
|
|
|
module.exports = Utils; |