hardlounge/src/clientManager.js

141 lines
2.6 KiB
JavaScript
Raw Normal View History

2014-08-14 13:25:22 -04:00
var _ = require("lodash");
2014-08-13 19:43:11 -04:00
var fs = require("fs");
2014-08-13 21:51:54 -04:00
var Client = require("./client");
2014-08-26 14:00:12 -04:00
var mkdirp = require("mkdirp");
var Helper = require("./helper");
2014-09-24 18:23:54 -04:00
var moment = require("moment");
2014-08-13 19:43:11 -04:00
module.exports = ClientManager;
function ClientManager() {
this.clients = [];
2014-08-13 19:43:11 -04:00
}
ClientManager.prototype.findClient = function(name) {
for (var i in this.clients) {
var client = this.clients[i];
if (client.name == name) {
return client;
}
}
return false;
};
2014-09-24 18:23:54 -04:00
ClientManager.prototype.loadUsers = function() {
2014-08-13 19:43:11 -04:00
var users = this.getUsers();
2014-08-13 21:51:54 -04:00
for (var i in users) {
2014-09-24 18:23:54 -04:00
this.loadUser(users[i]);
2014-08-13 21:51:54 -04:00
}
};
ClientManager.prototype.loadUser = function(name) {
try {
2014-08-26 14:00:12 -04:00
var json = fs.readFileSync(
2014-10-14 16:05:16 -04:00
Helper.HOME + "/users/" + name + ".json",
2014-08-26 14:00:12 -04:00
"utf-8"
);
2014-08-13 21:51:54 -04:00
json = JSON.parse(json);
} catch(e) {
console.log(e);
return;
}
2014-09-24 18:23:54 -04:00
if (!this.findClient(name)) {
this.clients.push(new Client(
this.sockets,
name,
json
));
2014-10-14 15:13:29 -04:00
console.log(
"User '" + name + "' loaded."
);
2014-09-24 18:23:54 -04:00
}
2014-08-13 19:43:11 -04:00
};
ClientManager.prototype.getUsers = function() {
var users = [];
2014-10-03 19:33:44 -04:00
var path = Helper.HOME + "/users";
2014-08-26 14:00:12 -04:00
mkdirp.sync(path);
2014-08-13 19:43:11 -04:00
try {
2014-08-26 14:00:12 -04:00
users = fs.readdirSync(path);
2014-10-14 16:05:16 -04:00
users =_.map(users, function(name) {
return name.replace(".json", "");
});
2014-08-13 19:43:11 -04:00
} catch(e) {
console.log(e);
return;
}
return users;
};
2014-08-13 21:51:54 -04:00
ClientManager.prototype.addUser = function(name, password) {
2014-08-13 19:43:11 -04:00
var users = this.getUsers();
if (users.indexOf(name) !== -1) {
2014-08-14 13:25:22 -04:00
return false;
2014-08-13 19:43:11 -04:00
}
try {
2014-10-14 16:05:16 -04:00
var path = Helper.HOME + "/users";
2014-08-13 21:51:54 -04:00
var user = {
user: name,
password: password || "",
2014-10-14 15:25:04 -04:00
log: false,
2014-08-13 21:51:54 -04:00
networks: []
};
2014-10-14 16:05:16 -04:00
mkdirp.sync(path);
2014-08-13 21:51:54 -04:00
fs.writeFileSync(
2014-10-14 16:05:16 -04:00
path + "/" + name + ".json",
2014-08-18 19:54:14 -04:00
JSON.stringify(user, null, " "),
{mode: "0777"}
2014-08-13 21:51:54 -04:00
);
2014-08-13 19:43:11 -04:00
} catch(e) {
throw e;
}
2014-08-14 13:25:22 -04:00
return true;
2014-08-13 19:43:11 -04:00
};
ClientManager.prototype.removeUser = function(name) {
var users = this.getUsers();
if (users.indexOf(name) === -1) {
2014-08-14 13:25:22 -04:00
return false;
2014-08-13 19:43:11 -04:00
}
try {
2014-10-14 16:05:16 -04:00
var path = Helper.HOME + "/users/" + name + ".json";
fs.unlinkSync(path);
2014-08-13 19:43:11 -04:00
} catch(e) {
throw e;
}
2014-08-14 13:25:22 -04:00
return true;
2014-08-13 19:43:11 -04:00
};
2014-09-24 18:23:54 -04:00
ClientManager.prototype.autoload = function(sockets) {
var self = this;
2014-10-14 15:13:29 -04:00
var loaded = [];
setInterval(function() {
var loaded = _.pluck(
self.clients,
"name"
);
2014-09-24 18:23:54 -04:00
2014-10-14 15:13:29 -04:00
var added = _.difference(self.getUsers(), loaded);
_.each(added, function(name) {
self.loadUser(name);
});
2014-10-14 15:13:29 -04:00
var removed = _.difference(loaded, self.getUsers());
_.each(removed, function(name) {
var client = _.find(
self.clients, {
name: name
}
);
if (client) {
client.quit();
self.clients = _.without(self.clients, client);
console.log(
"User '" + name + "' disconnected."
);
}
});
}, 1000);
2014-09-24 18:23:54 -04:00
};
2014-10-14 15:13:29 -04:00