From fe85873f1ea6411a17a783ec90ec48d4b871f17d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Astori?= Date: Sun, 8 May 2016 02:21:31 -0400 Subject: [PATCH 1/6] Replace all concatenated paths with Node's path.join --- src/clientManager.js | 24 +++++++++--------------- src/command-line/add.js | 12 ++++++------ src/command-line/config.js | 4 ++-- src/command-line/edit.js | 4 ++-- src/command-line/index.js | 18 ++++++++++++------ src/command-line/remove.js | 5 ++--- src/command-line/reset.js | 2 +- src/helper.js | 22 +++++++++++++++------- src/userLog.js | 2 +- 9 files changed, 50 insertions(+), 43 deletions(-) diff --git a/src/clientManager.js b/src/clientManager.js index 36cc048d..33db9474 100644 --- a/src/clientManager.js +++ b/src/clientManager.js @@ -3,7 +3,6 @@ var fs = require("fs"); var Client = require("./client"); var mkdirp = require("mkdirp"); var Helper = require("./helper"); -var path = require("path"); module.exports = ClientManager; @@ -46,10 +45,9 @@ ClientManager.prototype.loadUser = function(name) { ClientManager.prototype.getUsers = function() { var users = []; - var path = Helper.HOME + "/users"; - mkdirp.sync(path); + mkdirp.sync(Helper.USERS_PATH); try { - var files = fs.readdirSync(path); + var files = fs.readdirSync(Helper.USERS_PATH); files.forEach(function(file) { if (file.indexOf(".json") !== -1) { users.push(file.replace(".json", "")); @@ -68,10 +66,9 @@ ClientManager.prototype.addUser = function(name, password) { return false; } try { - var usersPath = path.join(Helper.HOME, "users"); - mkdirp.sync(usersPath); + mkdirp.sync(Helper.USERS_PATH); - if (path.basename(name) !== name) { + if (require("path").basename(name) !== name) { throw new Error(name + " is an invalid username."); } @@ -82,7 +79,7 @@ ClientManager.prototype.addUser = function(name, password) { networks: [] }; fs.writeFileSync( - path.join(usersPath, name + ".json"), + Helper.getUserConfigPath(name), JSON.stringify(user, null, " ") ); } catch (e) { @@ -100,14 +97,13 @@ ClientManager.prototype.updateUser = function(name, opts) { if (typeof opts === "undefined") { return false; } - var path = Helper.HOME + "/users/" + name + ".json"; - var user = {}; + var user = {}; try { user = this.readUserConfig(name); _.assign(user, opts); fs.writeFileSync( - path, + Helper.getUserConfigPath(name), JSON.stringify(user, null, " ") ); } catch (e) { @@ -122,9 +118,8 @@ ClientManager.prototype.readUserConfig = function(name) { if (users.indexOf(name) === -1) { return false; } - var path = Helper.HOME + "/users/" + name + ".json"; var user = {}; - var data = fs.readFileSync(path, "utf-8"); + var data = fs.readFileSync(Helper.getUserConfigPath(name), "utf-8"); user = JSON.parse(data); return user; }; @@ -135,8 +130,7 @@ ClientManager.prototype.removeUser = function(name) { return false; } try { - var path = Helper.HOME + "/users/" + name + ".json"; - fs.unlinkSync(path); + fs.unlinkSync(Helper.getUserConfigPath(name)); } catch (e) { throw e; } diff --git a/src/command-line/add.js b/src/command-line/add.js index 69410f09..7f335d8f 100644 --- a/src/command-line/add.js +++ b/src/command-line/add.js @@ -9,21 +9,21 @@ program .command("add ") .description("Add a new user") .action(function(name/* , password */) { - var path = Helper.HOME + "/users"; try { - mkdirp.sync(path); + mkdirp.sync(Helper.USERS_PATH); } catch (e) { - log.error("Could not create", path); + log.error("Could not create", Helper.USERS_PATH); log.info("Try running the command as sudo."); return; } try { - var test = path + "/.test"; + var test = require("path").join(Helper.USERS_PATH, ".test"); fs.mkdirSync(test); fs.rmdirSync(test); } catch (e) { - log.error("You have no permissions to write to", path); + log.error("You have no permissions to write to", Helper.USERS_PATH); log.info("Try running the command as sudo."); + log.error("Could not create", Helper.USERS_PATH); return; } var manager = new ClientManager(); @@ -50,5 +50,5 @@ function add(manager, name, password) { hash ); log.info("User '" + name + "' created:"); - log.info(Helper.HOME + "/users/" + name + ".json"); + log.info(Helper.getUserConfigPath(name)); } diff --git a/src/command-line/config.js b/src/command-line/config.js index e2658bdd..1fef7dde 100644 --- a/src/command-line/config.js +++ b/src/command-line/config.js @@ -4,11 +4,11 @@ var Helper = require("../helper"); program .command("config") - .description("Edit config: '" + Helper.HOME + "/config.js'") + .description("Edit config: " + Helper.CONFIG_PATH) .action(function() { child.spawn( process.env.EDITOR || "vi", - [Helper.HOME + "/config.js"], + [Helper.CONFIG_PATH], {stdio: "inherit"} ); }); diff --git a/src/command-line/edit.js b/src/command-line/edit.js index f9671102..5d849eb9 100644 --- a/src/command-line/edit.js +++ b/src/command-line/edit.js @@ -5,7 +5,7 @@ var Helper = require("../helper"); program .command("edit ") - .description("Edit user: '" + Helper.HOME + "/users/.json'") + .description("Edit user: " + Helper.getUserConfigPath("")) .action(function(name) { var users = new ClientManager().getUsers(); if (users.indexOf(name) === -1) { @@ -14,7 +14,7 @@ program } child.spawn( process.env.EDITOR || "vi", - [require("path").join(Helper.HOME, "users", name + ".json")], + [Helper.getUserConfigPath(name)], {stdio: "inherit"} ); }); diff --git a/src/command-line/index.js b/src/command-line/index.js index 95a51f42..ac8909d3 100644 --- a/src/command-line/index.js +++ b/src/command-line/index.js @@ -4,6 +4,7 @@ var program = require("commander"); var pkg = require("../../package.json"); var fs = require("fs"); var mkdirp = require("mkdirp"); +var path = require("path"); var Helper = require("../helper"); program.version(pkg.version, "-v, --version"); @@ -12,17 +13,22 @@ program.option(" --home " , "home path"); var argv = program.parseOptions(process.argv); if (program.home) { - Helper.HOME = program.home; + Helper.HOME = path.resolve(program.home); } -var config = Helper.HOME + "/config.js"; -if (!fs.existsSync(config)) { +if (!fs.existsSync(Helper.CONFIG_PATH)) { mkdirp.sync(Helper.HOME, {mode: "0700"}); fs.writeFileSync( - config, - fs.readFileSync(__dirname + "/../../defaults/config.js") + Helper.CONFIG_PATH, + fs.readFileSync(path.resolve(path.join( + __dirname, + "..", + "..", + "defaults", + "config.js" + ))) ); - log.info("Config created:", config); + log.info("Config created:", Helper.CONFIG_PATH); } require("./start"); diff --git a/src/command-line/remove.js b/src/command-line/remove.js index 683892f5..d6f383e6 100644 --- a/src/command-line/remove.js +++ b/src/command-line/remove.js @@ -8,12 +8,11 @@ program .description("Remove an existing user") .action(function(name) { try { - var path = Helper.HOME + "/users"; - var test = path + "/.test"; + var test = require("path").join(Helper.USERS_PATH, ".test"); fs.mkdirSync(test); fs.rmdirSync(test); } catch (e) { - log.warn("You have no permissions to delete from " + path); + log.warn("You have no permissions to delete from " + Helper.USERS_PATH); log.info("Try running the command as sudo."); return; } diff --git a/src/command-line/reset.js b/src/command-line/reset.js index d953ce66..38449fa4 100644 --- a/src/command-line/reset.js +++ b/src/command-line/reset.js @@ -13,7 +13,7 @@ program log.error("User '" + name + "' doesn't exist."); return; } - var file = Helper.HOME + "/users/" + name + ".json"; + var file = Helper.getUserConfigPath(name); var user = require(file); require("read")({ prompt: "[thelounge] New password: ", diff --git a/src/helper.js b/src/helper.js index 38ab2596..d391c761 100644 --- a/src/helper.js +++ b/src/helper.js @@ -1,17 +1,26 @@ var path = require("path"); var os = require("os"); +var HOME = expandHome("~/.lounge"); + module.exports = { - HOME: (process.env.HOME || process.env.USERPROFILE) + "/.lounge", - getConfig: getConfig, + HOME: HOME, + CONFIG_PATH: path.join(HOME, "config.js"), + USERS_PATH: path.join(HOME, "users"), expandHome: expandHome, + getConfig: getConfig, + getUserConfigPath: getUserConfigPath, }; -function getConfig() { - return require(path.resolve(this.HOME) + "/config"); +function getUserConfigPath(name) { + return path.join(this.USERS_PATH, name + ".json"); } -function expandHome(path) { +function getConfig() { + return require(this.CONFIG_PATH); +} + +function expandHome(shortenedPath) { var home; if (os.homedir) { @@ -24,6 +33,5 @@ function expandHome(path) { home = home.replace("$", "$$$$"); - return path.replace(/^~($|\/|\\)/, home + "$1"); + return path.resolve(shortenedPath.replace(/^~($|\/|\\)/, home + "$1")); } - diff --git a/src/userLog.js b/src/userLog.js index e9f436ec..a559b190 100644 --- a/src/userLog.js +++ b/src/userLog.js @@ -5,7 +5,7 @@ var Helper = require("./helper"); module.exports.write = function(user, network, chan, msg) { try { - var path = Helper.HOME + "/logs/" + user + "/" + network; + var path = require("path").join(Helper.HOME, "logs", user, network); mkdirp.sync(path); } catch (e) { log.error("Unabled to create logs directory", e); From d725bf0f7073424039aa678aa8b056036deb99ec Mon Sep 17 00:00:00 2001 From: Pavel Djundik Date: Mon, 9 May 2016 19:00:42 +0300 Subject: [PATCH 2/6] Remove permissions test and do not suggest using sudo --- src/command-line/add.js | 12 ------------ src/command-line/remove.js | 11 ----------- 2 files changed, 23 deletions(-) diff --git a/src/command-line/add.js b/src/command-line/add.js index 7f335d8f..d4c47124 100644 --- a/src/command-line/add.js +++ b/src/command-line/add.js @@ -1,6 +1,5 @@ var ClientManager = new require("../clientManager"); var bcrypt = require("bcrypt-nodejs"); -var fs = require("fs"); var program = require("commander"); var mkdirp = require("mkdirp"); var Helper = require("../helper"); @@ -12,17 +11,6 @@ program try { mkdirp.sync(Helper.USERS_PATH); } catch (e) { - log.error("Could not create", Helper.USERS_PATH); - log.info("Try running the command as sudo."); - return; - } - try { - var test = require("path").join(Helper.USERS_PATH, ".test"); - fs.mkdirSync(test); - fs.rmdirSync(test); - } catch (e) { - log.error("You have no permissions to write to", Helper.USERS_PATH); - log.info("Try running the command as sudo."); log.error("Could not create", Helper.USERS_PATH); return; } diff --git a/src/command-line/remove.js b/src/command-line/remove.js index d6f383e6..0d3b2ce9 100644 --- a/src/command-line/remove.js +++ b/src/command-line/remove.js @@ -1,21 +1,10 @@ var ClientManager = new require("../clientManager"); -var fs = require("fs"); var program = require("commander"); -var Helper = require("../helper"); program .command("remove ") .description("Remove an existing user") .action(function(name) { - try { - var test = require("path").join(Helper.USERS_PATH, ".test"); - fs.mkdirSync(test); - fs.rmdirSync(test); - } catch (e) { - log.warn("You have no permissions to delete from " + Helper.USERS_PATH); - log.info("Try running the command as sudo."); - return; - } var manager = new ClientManager(); if (manager.removeUser(name)) { log.info("Removed user '" + name + "'."); From dcec9f3c37b45bee6059c5ee3549c9e1c006e0ad Mon Sep 17 00:00:00 2001 From: Pavel Djundik Date: Mon, 9 May 2016 19:19:16 +0300 Subject: [PATCH 3/6] Fix overriding home folder --- src/command-line/index.js | 5 ++--- src/helper.js | 16 ++++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/command-line/index.js b/src/command-line/index.js index ac8909d3..d81988bb 100644 --- a/src/command-line/index.js +++ b/src/command-line/index.js @@ -12,9 +12,8 @@ program.option(""); program.option(" --home " , "home path"); var argv = program.parseOptions(process.argv); -if (program.home) { - Helper.HOME = path.resolve(program.home); -} + +Helper.setHome(program.home); if (!fs.existsSync(Helper.CONFIG_PATH)) { mkdirp.sync(Helper.HOME, {mode: "0700"}); diff --git a/src/helper.js b/src/helper.js index d391c761..ac323d90 100644 --- a/src/helper.js +++ b/src/helper.js @@ -1,17 +1,21 @@ var path = require("path"); var os = require("os"); -var HOME = expandHome("~/.lounge"); - -module.exports = { - HOME: HOME, - CONFIG_PATH: path.join(HOME, "config.js"), - USERS_PATH: path.join(HOME, "users"), +var Helper = { expandHome: expandHome, getConfig: getConfig, getUserConfigPath: getUserConfigPath, + setHome: setHome, }; +module.exports = Helper; + +function setHome(homePath) { + this.HOME = expandHome(homePath || "~/.lounge"); + this.CONFIG_PATH = path.join(this.HOME, "config.js"); + this.USERS_PATH = path.join(this.HOME, "users"); +} + function getUserConfigPath(name) { return path.join(this.USERS_PATH, name + ".json"); } From d6f2def825852cb2cd82ff030822f0ced2f08266 Mon Sep 17 00:00:00 2001 From: Pavel Djundik Date: Mon, 9 May 2016 19:34:51 +0300 Subject: [PATCH 4/6] Do not override HOME env in tests --- test/fixtures/env.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/fixtures/env.js b/test/fixtures/env.js index 2c875590..08aafaf0 100644 --- a/test/fixtures/env.js +++ b/test/fixtures/env.js @@ -1 +1,2 @@ -process.env.HOME = "test/fixtures"; +var home = require("path").join(__dirname, ".lounge"); +require("../../src/helper").setHome(home); From f65ffdff1ecbe6adbdb84639b5c7827ff19114b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Astori?= Date: Sun, 15 May 2016 17:13:51 -0400 Subject: [PATCH 5/6] Centralize the logs path in the Helper --- src/helper.js | 5 +++++ src/userLog.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/helper.js b/src/helper.js index ac323d90..b6d11cad 100644 --- a/src/helper.js +++ b/src/helper.js @@ -5,6 +5,7 @@ var Helper = { expandHome: expandHome, getConfig: getConfig, getUserConfigPath: getUserConfigPath, + getUserLogsPath: getUserLogsPath, setHome: setHome, }; @@ -20,6 +21,10 @@ function getUserConfigPath(name) { return path.join(this.USERS_PATH, name + ".json"); } +function getUserLogsPath(name, network) { + return path.join(this.HOME, "logs", name, network); +} + function getConfig() { return require(this.CONFIG_PATH); } diff --git a/src/userLog.js b/src/userLog.js index a559b190..c2805dc6 100644 --- a/src/userLog.js +++ b/src/userLog.js @@ -5,7 +5,7 @@ var Helper = require("./helper"); module.exports.write = function(user, network, chan, msg) { try { - var path = require("path").join(Helper.HOME, "logs", user, network); + var path = Helper.getUserLogsPath(user, network); mkdirp.sync(path); } catch (e) { log.error("Unabled to create logs directory", e); From ca06e63e98046e9795c0117604d37dd5aa854038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Astori?= Date: Sun, 15 May 2016 17:15:03 -0400 Subject: [PATCH 6/6] Fix log directory in config defaults --- defaults/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/config.js b/defaults/config.js index 46287a07..5481a5cf 100644 --- a/defaults/config.js +++ b/defaults/config.js @@ -129,7 +129,7 @@ module.exports = { // Log settings // // Logging has to be enabled per user. If enabled, logs will be stored in - // the '/users//logs/' folder. + // the 'logs///' folder. // // @type object // @default {}