diff --git a/.eslintrc.json b/.eslintrc.json index b5c6517..c065b39 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -18,6 +18,10 @@ "error", "always" ], - "prefer-const": "error" + "prefer-const": "error", + "prefer-destructuring": "error", + "no-var": "error", + "strict": "error", + "eol-last": "error" } } \ No newline at end of file diff --git a/actions/createProxyServer.js b/actions/createProxyServer.js index 6a3285a..7a75fd4 100644 --- a/actions/createProxyServer.js +++ b/actions/createProxyServer.js @@ -1,12 +1,14 @@ -var fs = require('fs-extra'); -var shell = require('shelljs'); +'use strict'; -var npath = require('../utils/nginxPath'); -var conf = require('../utils/nginxConf'); -var nginxReload = require('../utils/nginxReload'); -var appendToList = require('../utils/listFile').appendToList; +const fs = require('fs-extra'); +const shell = require('shelljs'); -var EOL = require('os').EOL; // \n if used on Linux, \r\n if used on Windows. +const npath = require('../utils/nginxPath'); +const conf = require('../utils/nginxConf'); +const nginxReload = require('../utils/nginxReload'); +const { appendToList } = require('../utils/listFile'); + +const { EOL } = require('os'); // \n if used on Linux, \r\n if used on Windows. function createProxyServer(domain, inPort, outPort) { outPort = outPort || 80; @@ -37,4 +39,4 @@ function createProxyServer(domain, inPort, outPort) { nginxReload(); } -module.exports = createProxyServer; \ No newline at end of file +module.exports = createProxyServer; diff --git a/actions/createStaticServer.js b/actions/createStaticServer.js index 45619e9..e3e124d 100644 --- a/actions/createStaticServer.js +++ b/actions/createStaticServer.js @@ -1,14 +1,16 @@ -var fs = require('fs-extra'); -var shell = require('shelljs'); -var path = require('path'); +'use strict'; -var npath = require('../utils/nginxPath'); -var conf = require('../utils/nginxConf'); -var nginxReload = require('../utils/nginxReload'); -var appendToList = require('../utils/listFile').appendToList; +const fs = require('fs-extra'); +const shell = require('shelljs'); +const path = require('path'); -var currentPath = path.normalize(process.cwd()); -var EOL = require('os').EOL; // \n if used on Linux, \r\n if used on Windows. +const npath = require('../utils/nginxPath'); +const conf = require('../utils/nginxConf'); +const nginxReload = require('../utils/nginxReload'); +const { appendToList } = require('../utils/listFile'); + +const currentPath = path.normalize(process.cwd()); +const { EOL } = require('os'); // \n if used on Linux, \r\n if used on Windows. function createStaticServer(domain, outPort) { outPort = outPort || 80; @@ -38,4 +40,4 @@ function createStaticServer(domain, outPort) { nginxReload(); } -module.exports = createStaticServer; \ No newline at end of file +module.exports = createStaticServer; diff --git a/actions/killALL.js b/actions/killALL.js index 5726dc9..ae937d7 100644 --- a/actions/killALL.js +++ b/actions/killALL.js @@ -1,7 +1,9 @@ -var shell = require('shelljs'); +'use strict'; -var npath = require('../utils/nginxPath'); -var conf = require('../utils/nginxConf'); +const shell = require('shelljs'); + +const npath = require('../utils/nginxPath'); +const conf = require('../utils/nginxConf'); function killALL () { shell.rm('-Rf', npath.serversBakUp); @@ -17,4 +19,4 @@ function killALL () { shell.ln('-sf', npath.confD() + "default.conf", npath.enabledSites() + "default.conf"); // Symlink the default.conf file from confD to sites-enabled } -module.exports = killALL; \ No newline at end of file +module.exports = killALL; diff --git a/actions/killAllConfirm.js b/actions/killAllConfirm.js index 901a017..21af771 100644 --- a/actions/killAllConfirm.js +++ b/actions/killAllConfirm.js @@ -1,3 +1,5 @@ +'use strict'; + const prompt = require('prompt'); const shell = require('shelljs'); @@ -8,7 +10,7 @@ function killAllConfirm () { prompt.start(); - var property = { + const property = { name: 'yesno', message: 'This will completely destroy all configs and reset nginx. Are you sure?', validator: /y[es]*|n[o]?/, @@ -29,4 +31,4 @@ function killAllConfirm () { }); } -module.exports = killAllConfirm; \ No newline at end of file +module.exports = killAllConfirm; diff --git a/actions/killServer.js b/actions/killServer.js index 333bcda..665fa42 100644 --- a/actions/killServer.js +++ b/actions/killServer.js @@ -1,9 +1,11 @@ -var shell = require('shelljs'); +'use strict'; -var npath = require('../utils/nginxPath'); -var conf = require('../utils/nginxConf'); -var nginxReload = require('../utils/nginxReload'); -var removeFromList = require('../utils/listFile').removeFromList; +const shell = require('shelljs'); + +const npath = require('../utils/nginxPath'); +const conf = require('../utils/nginxConf'); +const nginxReload = require('../utils/nginxReload'); +const { removeFromList } = require('../utils/listFile'); function killServer(domain, outPort) { shell.rm('-rf', conf(npath.enabledSites(), domain, outPort)); @@ -14,4 +16,4 @@ function killServer(domain, outPort) { nginxReload(); } -module.exports = killServer; \ No newline at end of file +module.exports = killServer; diff --git a/actions/listServers.js b/actions/listServers.js index 349154c..222643b 100644 --- a/actions/listServers.js +++ b/actions/listServers.js @@ -1,12 +1,14 @@ -var readServers = require('../utils/listFile').readServers; -var prettyjson = require('prettyjson'); +'use strict'; -var EOL = require('os').EOL; +const { readServers } = require('../utils/listFile'); +const prettyjson = require('prettyjson'); + +const { EOL } = require('os'); function listServers() { - var serversList = readServers(); + const serversList = readServers(); if(serversList) console.log(EOL + prettyjson.render(serversList) + EOL); else console.log("\nNo servers were found! Create some using `up`!\n"); } -module.exports = listServers; \ No newline at end of file +module.exports = listServers; diff --git a/build/fetchTLDS.js b/build/fetchTLDS.js index bc796dc..c9edc79 100644 --- a/build/fetchTLDS.js +++ b/build/fetchTLDS.js @@ -1,7 +1,9 @@ -var https = require('https'); -var fs = require('fs-extra'); +'use strict'; -var file = fs.createWriteStream("./assets/tlds.txt"); +const https = require('https'); +const fs = require('fs-extra'); + +const file = fs.createWriteStream("./assets/tlds.txt"); https.get("https://data.iana.org/TLD/tlds-alpha-by-domain.txt", function(response) { response.pipe(file); -}); \ No newline at end of file +}); diff --git a/index.js b/index.js index 2bdbf03..d7ed91d 100755 --- a/index.js +++ b/index.js @@ -3,20 +3,20 @@ 'use strict'; // Requiring npm modules -var program = require('commander'); -var chalk = require('chalk'); +const program = require('commander'); +const chalk = require('chalk'); //var fs = require('fs-extra'); // Requiring Actions -var createProxyServer = require('./actions/createProxyServer'); -var createStaticServer = require('./actions/createStaticServer'); -var killServer = require('./actions/killServer'); -var listServers = require('./actions/listServers'); -var killAllConfirm = require('./actions/killAllConfirm'); +const createProxyServer = require('./actions/createProxyServer'); +const createStaticServer = require('./actions/createStaticServer'); +const killServer = require('./actions/killServer'); +const listServers = require('./actions/listServers'); +const killAllConfirm = require('./actions/killAllConfirm'); // Requiring utils -var validate = require('./utils/validate'); -var requirements = require('./utils/requirements'); +const validate = require('./utils/validate'); +const requirements = require('./utils/requirements'); // Check for requirements such as OS version and nginx install. Throw and exit if requirements not found. // #Roadmap: Add ability to satisfy any possible requirements. @@ -93,4 +93,4 @@ program.on('--help', function () { }); // Parses commands passed to `up` and chooses one of the above commands. -program.parse(process.argv); \ No newline at end of file +program.parse(process.argv); diff --git a/utils/isFQDN.js b/utils/isFQDN.js index 5b9a6cd..fd0de97 100644 --- a/utils/isFQDN.js +++ b/utils/isFQDN.js @@ -3,7 +3,7 @@ 'use strict'; -var fs = require('fs-extra'); +const fs = require('fs-extra'); // Official list of TLDs should be fetched from: // https://data.iana.org/TLD/tlds-alpha-by-domain.txt @@ -14,7 +14,7 @@ var fs = require('fs-extra'); function isFQDN(domain) { // Importing and parsing `tlds.txt` file - var tlds = fs.readFileSync('./assets/tlds.txt', 'utf8') + const tlds = fs.readFileSync('./assets/tlds.txt', 'utf8') .split(/[\r\n]+/) .filter(x => !x.startsWith('#')); @@ -22,19 +22,19 @@ function isFQDN(domain) { return false; } - var labels = domain.split('.').reverse(); + const labels = domain.split('.').reverse(); if (labels.length < 2) { return false; } - var tld = labels[0]; + const [ tld ] = labels; if (!tlds.includes(tld.toUpperCase())) { return false; } - for (var label of labels) { + for (const label of labels) { const len = label.length; @@ -56,6 +56,6 @@ function isFQDN(domain) { } } return true; -}; +} -module.exports = isFQDN; \ No newline at end of file +module.exports = isFQDN; diff --git a/utils/isIP.js b/utils/isIP.js index 0a25224..864d647 100644 --- a/utils/isIP.js +++ b/utils/isIP.js @@ -1,14 +1,16 @@ +'use strict'; + // Parses a string, and returns true if it is an IP Address. function isIP(str) { - var segments = str + const segments = str .split(".") .map(Number); if (!segments.length === 4) { return false; } - for(var i = 0; i < segments.length; i++) { - var segment = segments[i]; + for(let i = 0; i < segments.length; i++) { + const segment = segments[i]; if (Number.isNaN(segment)) { return false; } @@ -22,4 +24,4 @@ function isIP(str) { return true; } -module.exports = isIP; \ No newline at end of file +module.exports = isIP; diff --git a/utils/listFile.js b/utils/listFile.js index 7e5b688..2e175f4 100644 --- a/utils/listFile.js +++ b/utils/listFile.js @@ -1,13 +1,15 @@ -var fs = require('fs-extra'); +'use strict'; -var removeFromArray = require('./removeFromArray'); -var listFilePath = require('./nginxPath').serversUp; +const fs = require('fs-extra'); + +const removeFromArray = require('./removeFromArray'); +const listFilePath = require('./nginxPath').serversUp; function appendToList(domain, outPort, inPort) { inPort = inPort || undefined; - var jsonFile = { "domains": [] }; - var domBlock = { + let jsonFile = { "domains": [] }; + const domBlock = { "domain": domain, "outPort": outPort }; @@ -20,7 +22,7 @@ function appendToList(domain, outPort, inPort) { } if (fs.existsSync(listFilePath())) { - var jsonBuffer = JSON.parse(fs.readFileSync(listFilePath())); + const jsonBuffer = JSON.parse(fs.readFileSync(listFilePath())); jsonFile.domains = removeFromArray(jsonBuffer.domains, domain, outPort); } jsonFile.domains.push(domBlock); @@ -30,8 +32,8 @@ function appendToList(domain, outPort, inPort) { function removeFromList (domain, outPort) { if (fs.existsSync(listFilePath())) { - var jsonFile = { "domains": [] }; - var jsonBuffer = JSON.parse(fs.readFileSync(listFilePath())); + let jsonFile = { "domains": [] }; + const jsonBuffer = JSON.parse(fs.readFileSync(listFilePath())); jsonFile.domains = removeFromArray(jsonBuffer.domains, domain, outPort); jsonFile = JSON.stringify(jsonBuffer, null, '\t'); @@ -41,7 +43,7 @@ function removeFromList (domain, outPort) { } function readServers () { - var serversList = JSON.parse(fs.readFileSync(listFilePath())); + const serversList = JSON.parse(fs.readFileSync(listFilePath())); if(!serversList.domains[0]) return undefined; return serversList; @@ -49,4 +51,4 @@ function readServers () { module.exports.appendToList = appendToList; module.exports.readServers = readServers; -module.exports.removeFromList = removeFromList; \ No newline at end of file +module.exports.removeFromList = removeFromList; diff --git a/utils/nginxConf.js b/utils/nginxConf.js index 5599e60..2037feb 100644 --- a/utils/nginxConf.js +++ b/utils/nginxConf.js @@ -1,7 +1,9 @@ +'use strict'; + // Simple function that takes a path and domain name, concatenates them with ".conf" and returns it. function conf(path, domain, outPort) { return (path + domain + "." + outPort + ".conf"); } -module.exports = conf; \ No newline at end of file +module.exports = conf; diff --git a/utils/nginxPath.js b/utils/nginxPath.js index 7d1b698..96feaac 100644 --- a/utils/nginxPath.js +++ b/utils/nginxPath.js @@ -2,12 +2,12 @@ // These functions just return paths. Later, these should be modified to poll from nginx's config. -var npath = "/etc/nginx/"; -var enabled = npath + "sites-enabled/"; -var confDpath = npath + "conf.d/"; -var upPath = "/etc/up-serve/"; -var wwwRoot = upPath + "static/"; -var serverListPath = upPath + "servers"; +const npath = "/etc/nginx/"; +const enabled = npath + "sites-enabled/"; +const confDpath = npath + "conf.d/"; +const upPath = "/etc/up-serve/"; +const wwwRoot = upPath + "static/"; +const serverListPath = upPath + "servers"; function nginxPath() { return npath; @@ -46,4 +46,4 @@ module.exports.enabledSites = enabledSites; module.exports.webRoot = webRoot; module.exports.webRootDomain = webRootDomain; module.exports.serversUp = serversUp; -module.exports.serversBakUp = serversBakUp; \ No newline at end of file +module.exports.serversBakUp = serversBakUp; diff --git a/utils/nginxReload.js b/utils/nginxReload.js index 8661220..ff94eff 100644 --- a/utils/nginxReload.js +++ b/utils/nginxReload.js @@ -1,4 +1,6 @@ -var execSync = require('child_process').execSync; +'use strict'; + +const { execSync } = require('child_process'); function nginxReload() { execSync('service nginx reload', function (error, stdout, stderr) { @@ -11,4 +13,4 @@ function nginxReload() { }); } -module.exports = nginxReload; \ No newline at end of file +module.exports = nginxReload; diff --git a/utils/parseToInt.js b/utils/parseToInt.js index 891d3f6..522aa75 100644 --- a/utils/parseToInt.js +++ b/utils/parseToInt.js @@ -1,8 +1,10 @@ +'use strict'; + // Parse an input string and return a number if it is an integer. If it's a float, string, or array, return undefined. function parseToInt(inputString) { - var parsing = /^\d+$/.exec(inputString); + const parsing = /^\d+$/.exec(inputString); return (parsing || [])[0]; } -module.exports = parseToInt; \ No newline at end of file +module.exports = parseToInt; diff --git a/utils/removeFromArray.js b/utils/removeFromArray.js index 087d04b..bdd0e90 100644 --- a/utils/removeFromArray.js +++ b/utils/removeFromArray.js @@ -1,7 +1,11 @@ +'use strict'; + function removeFromArray (arr, dom, port) { - var shouldDelete = []; + let shouldDelete = []; - for(var i = 0; i < arr.length; i++) if((arr[i].domain == dom) && (arr[i].outPort == port)) shouldDelete = [true, i]; + for(let i = 0; i < arr.length; i++) + if((arr[i].domain == dom) && (arr[i].outPort == port)) + shouldDelete = [true, i]; if (shouldDelete[0]) { arr.splice(shouldDelete[1], 1); @@ -9,4 +13,4 @@ function removeFromArray (arr, dom, port) { return arr; } -module.exports = removeFromArray; \ No newline at end of file +module.exports = removeFromArray; diff --git a/utils/requirements.js b/utils/requirements.js index 90727e4..159a53c 100644 --- a/utils/requirements.js +++ b/utils/requirements.js @@ -1,10 +1,12 @@ -var shell = require('shelljs'); -var chalk = require('chalk'); +'use strict'; + +const shell = require('shelljs'); +const chalk = require('chalk'); function requirements() { // Detect Linux or BSD - var isLin = /^linux|^bsd/.test(process.platform); + const isLin = /^linux|^bsd/.test(process.platform); // Throw if OS is not Linux or BSD. This should be changed to throw if not Debian based distro. Eventually, we can add more exceptions as `up` handles more cases. if(!isLin) { @@ -20,4 +22,4 @@ function requirements() { } -module.exports = requirements; \ No newline at end of file +module.exports = requirements; diff --git a/utils/validate.js b/utils/validate.js index f8e38eb..a8afa5e 100644 --- a/utils/validate.js +++ b/utils/validate.js @@ -1,8 +1,10 @@ -var parseToInt = require('./parseToInt'); -var isIP = require('./isIP'); +'use strict'; + +const parseToInt = require('./parseToInt'); +const isIP = require('./isIP'); // Using Validator -var isDomain = require('./isFQDN'); +const isDomain = require('./isFQDN'); function validate(domain, inPort, outPort) { // @@ -10,15 +12,15 @@ function validate(domain, inPort, outPort) { outPort = outPort || 80; // Error messages - var domainInvalidMsg = ["\nPlease use a domain name instead of an IP address.", "\nDomain is not valid. Please use a valid domain name."]; - var portInvalidMsg = ["\nPort should be a number.", "\nPort should be a number from 1 and 65535."]; + const domainInvalidMsg = ["\nPlease use a domain name instead of an IP address.", "\nDomain is not valid. Please use a valid domain name."]; + const portInvalidMsg = ["\nPort should be a number.", "\nPort should be a number from 1 and 65535."]; // ARGV returns a string as input. Port numbers should be parsed to int to validate them. If validation fails, these will return undefined and will fail the subsequent test. - var validInPort = parseToInt(inPort); - var validOutPort = parseToInt(outPort); + const validInPort = parseToInt(inPort); + const validOutPort = parseToInt(outPort); // The value of isInvalid will be returned back. If none of the `if`s are true, the default value `true` is returned `domain`, `inPort` and `outPort` are considered validated. - var isValid = true; + let isValid = true; // Throw if IP is given instead of domain name. if (isIP(domain)) { @@ -60,4 +62,4 @@ function validate(domain, inPort, outPort) { } } -module.exports = validate; \ No newline at end of file +module.exports = validate;