diff --git a/defaults/config.js b/defaults/config.js index 22312601..b392b762 100644 --- a/defaults/config.js +++ b/defaults/config.js @@ -55,17 +55,6 @@ module.exports = { // theme: "themes/example.css", - // - // Autoload users - // - // When this setting is enabled, your 'users/' folder will be monitored. This is useful - // if you want to add/remove users while the server is running. - // - // @type boolean - // @default true - // - autoload: true, - // // Prefetch URLs // diff --git a/src/client.js b/src/client.js index 88efe83c..16df18e7 100644 --- a/src/client.js +++ b/src/client.js @@ -1,6 +1,7 @@ "use strict"; var _ = require("lodash"); +var colors = require("colors/safe"); var pkg = require("../package.json"); var Chan = require("./models/chan"); var crypto = require("crypto"); @@ -89,7 +90,7 @@ function Client(manager, name, config) { }); if (client.name) { - log.info("User '" + client.name + "' loaded"); + log.info(`User ${colors.bold(client.name)} loaded`); } } diff --git a/src/clientManager.js b/src/clientManager.js index 8dd6af70..fd5aefd0 100644 --- a/src/clientManager.js +++ b/src/clientManager.js @@ -1,6 +1,7 @@ "use strict"; var _ = require("lodash"); +var colors = require("colors/safe"); var fs = require("fs"); var Client = require("./client"); var Helper = require("./helper"); @@ -26,11 +27,26 @@ ClientManager.prototype.findClient = function(name, token) { return false; }; -ClientManager.prototype.loadUsers = function() { - var users = this.getUsers(); - for (var i in users) { - this.loadUser(users[i]); - } +ClientManager.prototype.autoloadUsers = function() { + this.getUsers().forEach(name => this.loadUser(name)); + + fs.watch(Helper.USERS_PATH, _.debounce(() => { + const loaded = this.clients.map(c => c.name); + const updatedUsers = this.getUsers(); + + // New users created since last time users were loaded + _.difference(updatedUsers, loaded).forEach(name => this.loadUser(name)); + + // Existing users removed since last time users were loaded + _.difference(loaded, updatedUsers).forEach(name => { + const client = _.find(this.clients, {name: name}); + if (client) { + client.quit(); + this.clients = _.without(this.clients, client); + log.info(`User ${colors.bold(name)} disconnected and removed`); + } + }); + }, 1000, {maxWait: 10000})); }; ClientManager.prototype.loadUser = function(name) { @@ -145,27 +161,3 @@ ClientManager.prototype.removeUser = function(name) { } return true; }; - -ClientManager.prototype.autoload = function() { - var self = this; - - fs.watch(Helper.USERS_PATH, _.debounce(() => { - var loaded = self.clients.map(c => c.name); - var added = _.difference(self.getUsers(), loaded); - added.forEach(name => self.loadUser(name)); - - var removed = _.difference(loaded, self.getUsers()); - removed.forEach(name => { - var client = _.find( - self.clients, { - name: name - } - ); - if (client) { - client.quit(); - self.clients = _.without(self.clients, client); - log.info("User '" + name + "' disconnected"); - } - }); - }, 1000, {maxWait: 10000})); -}; diff --git a/src/server.js b/src/server.js index 62cea3a4..57aaae3c 100644 --- a/src/server.js +++ b/src/server.js @@ -88,10 +88,11 @@ in ${config.public ? "public" : "private"} mode`); log.info(`Press Ctrl-C to stop\n`); if (!config.public) { - manager.loadUsers(); - if (config.autoload) { - manager.autoload(); + if ("autoload" in config) { + log.warn(`Autoloading users is now always enabled. Please remove the ${colors.yellow("autoload")} option from your configuration file.`); } + + manager.autoloadUsers(); } };