Merge pull request #779 from thelounge/astorije/users-always-autoload
Make user autoload more transparent in the app
This commit is contained in:
commit
5213853524
@ -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
|
||||
//
|
||||
|
@ -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`);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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}));
|
||||
};
|
||||
|
@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user