"use strict"; const pkg = require("../package.json"); var _ = require("lodash"); var path = require("path"); var os = require("os"); var fs = require("fs"); var net = require("net"); var bcrypt = require("bcryptjs"); var Helper = { config: null, expandHome: expandHome, getUserConfigPath: getUserConfigPath, getUserLogsPath: getUserLogsPath, setHome: setHome, getVersion: getVersion, getGitCommit: getGitCommit, ip2hex: ip2hex, password: { hash: passwordHash, compare: passwordCompare, requiresUpdate: passwordRequiresUpdate, }, }; module.exports = Helper; Helper.config = require(path.resolve(path.join( __dirname, "..", "defaults", "config.js" ))); function getVersion() { const gitCommit = getGitCommit(); return gitCommit ? `source (${gitCommit})` : `v${pkg.version}`; } let _gitCommit; function getGitCommit() { if (_gitCommit !== undefined) { return _gitCommit; } try { _gitCommit = require("child_process") .execSync("git rev-parse --short HEAD 2> /dev/null") // Returns hash of current commit .toString() .trim(); return _gitCommit; } catch (e) { // Not a git repository or git is not installed _gitCommit = null; return null; } } 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"); // Reload config from new home location if (fs.existsSync(this.CONFIG_PATH)) { var userConfig = require(this.CONFIG_PATH); this.config = _.extend(this.config, userConfig); } // TODO: Remove in future release if (this.config.debug === true) { log.warn("debug option is now an object, see defaults file for more information."); this.config.debug = {ircFramework: true}; } } function getUserConfigPath(name) { return path.join(this.USERS_PATH, name + ".json"); } function getUserLogsPath(name, network) { return path.join(this.HOME, "logs", name, network); } function ip2hex(address) { // no ipv6 support if (!net.isIPv4(address)) { return "00000000"; } return address.split(".").map(function(octet) { var hex = parseInt(octet, 10).toString(16); if (hex.length === 1) { hex = "0" + hex; } return hex; }).join(""); } function expandHome(shortenedPath) { var home; if (os.homedir) { home = os.homedir(); } if (!home) { home = process.env.HOME || ""; } home = home.replace("$", "$$$$"); return path.resolve(shortenedPath.replace(/^~($|\/|\\)/, home + "$1")); } function passwordRequiresUpdate(password) { return bcrypt.getRounds(password) !== 11; } function passwordHash(password) { return bcrypt.hashSync(password, bcrypt.genSaltSync(11)); } function passwordCompare(password, expected) { return bcrypt.compare(password, expected); }