168 lines
5.2 KiB
JavaScript
168 lines
5.2 KiB
JavaScript
/*
|
|
* This file is part of the authRXBN single sign-on package.
|
|
*
|
|
* (c) Ruben Meyer <contact@rxbn.de>
|
|
*/
|
|
|
|
module.exports = {
|
|
'command': 'user <action> <nick> [data...]',
|
|
'description': 'add, get, update or remove an user',
|
|
'actionDependencies': ['vorpal'],
|
|
'action': (actionDependencies) => {
|
|
let vorpal = actionDependencies.vorpal;
|
|
return (args, cb) => {
|
|
if(typeof args.action !== 'undefined') {
|
|
let action = args.action.toLowerCase();
|
|
let profile = {
|
|
user: args.nick,
|
|
pass: null,
|
|
mail: null,
|
|
group: 0
|
|
};
|
|
|
|
// add a new user
|
|
if(action === 'add') {
|
|
if(Array.isArray(args.data) && args.data.length >= 1) {
|
|
// set data
|
|
profile.pass = global['modules'].auth.generateHash(args.data[0]);
|
|
if(args.data.length >= 2) profile.mail = args.data[1];
|
|
if(args.data.length >= 3) profile.group = args.data[2];
|
|
|
|
// haystack verifying
|
|
let haystack = profile.user;
|
|
if(typeof profile.mail !== 'undefined' && profile.mail !== null) haystack = [profile.user, profile.mail];
|
|
|
|
// query user by haystack
|
|
global['modules'].database.getUser(haystack, (err, rep) => {
|
|
if(err) {
|
|
global['logs'].error("ERR: While finding user");
|
|
global['logs'].error(err);
|
|
}
|
|
else {
|
|
// no users exist, add user
|
|
if (!rep) {
|
|
global['modules'].database.addUser(profile.user, (profile.mail || ''), profile.pass, profile.group, (errAdd, repAdd) => {
|
|
if(errAdd) {
|
|
global['logs'].error("ERR: While adding user");
|
|
global['logs'].error(errAdd);
|
|
}
|
|
else vorpal.log("Reply: "+repAdd);
|
|
});
|
|
// user already exists
|
|
} else {
|
|
vorpal.log("User exists: ");
|
|
vorpal.log(rep);
|
|
}
|
|
}
|
|
});
|
|
// missing data
|
|
} else {
|
|
global['logs'].log("No data is present or is missing. Please see:");
|
|
global['logs'].log("$ user help add");
|
|
cb();
|
|
}
|
|
// query users
|
|
} else if(action === 'get') {
|
|
// wildcard catch-all
|
|
if(profile.user === '*') {
|
|
global['modules'].database.getUsers((err, rep) => {
|
|
if(rep) {
|
|
global['logs'].log(rep);
|
|
}
|
|
if(err) {
|
|
global['logs'].error('$ user get *');
|
|
global['logs'].error(err);
|
|
}
|
|
});
|
|
} else {
|
|
// query users by first input <nickname>
|
|
global['modules'].database.getUser(profile.user, (err, rep) => {
|
|
if(rep) {
|
|
global['logs'].log("User exists: ");
|
|
global['logs'].log(rep);
|
|
} else {
|
|
global['logs'].warn("User "+profile.user+" doesn't exist.");
|
|
}
|
|
if(err) {
|
|
global['logs'].error('$ user get '+profile.user);
|
|
global['logs'].error(err);
|
|
}
|
|
});
|
|
}
|
|
|
|
// update users, just one field
|
|
} else if(action === 'update') {
|
|
if(args.data.length < 2) vorpal.log("No data supplied.");
|
|
else {
|
|
let field = args.data[0];
|
|
let param = args.data[1];
|
|
vorpal.log("Field: "+field+"; Param: "+param);
|
|
}
|
|
} else if(action === 'remove' || action === 'delete') {
|
|
// haystack
|
|
let haystack = profile.user;
|
|
if(typeof profile.mail !== 'undefined' && profile.mail !== null) haystack = [profile.user, profile.mail];
|
|
|
|
global['modules'].database.getUser(haystack, (err, rep) => {
|
|
if(rep) {
|
|
vorpal.log("User exists. Deleting him.");
|
|
global['logs'].debug(rep);
|
|
global['modules'].database.delUser(rep[0].email, (errDel, repDel) => {
|
|
if(repDel) {
|
|
vorpal.log("Deleted user.");
|
|
global['logs'].debug(repDel);
|
|
}
|
|
else {
|
|
vorpal.log("ERR: While deleting user.");
|
|
global['logs'].debug(errDel);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} else if(action === 'help') {
|
|
if(args.nick === 'add') {
|
|
vorpal.log("user add <nickname> <raw password> <mail> [group]");
|
|
vorpal.log("<nickname>: user nickname");
|
|
vorpal.log("<raw password>: will be hashed ASAP");
|
|
vorpal.log("<mail>: format: user@example.tld");
|
|
vorpal.log("[group]: not needed; only Numbers; group id");
|
|
|
|
vorpal.log("---");
|
|
|
|
vorpal.log("returning 0 or 1 and printing errors");
|
|
} else if(args.nick === 'get') {
|
|
vorpal.log("user get <nickname or email>");
|
|
vorpal.log("<nickname or email>: searching both in both; format: foobar OR user@example.tld");
|
|
|
|
vorpal.log("---");
|
|
vorpal.log("user get * - to get all users");
|
|
vorpal.log("printing JSON-object of user data");
|
|
} else if(args.nick === 'update') {
|
|
vorpal.log("user update <nickname> <field> <parameter>");
|
|
vorpal.log("<nickname>: user nickname");
|
|
vorpal.log("<field>: string");
|
|
vorpal.log("<parameter>: mixed data; will be converted to Boolean, Number or String");
|
|
|
|
vorpal.log("---");
|
|
|
|
vorpal.log("returning 0 or 1 and printing errors");
|
|
vorpal.log("printing JSON-object of updated user data");
|
|
} else if(args.nick === 'remove' || args.nick === 'delete') {
|
|
vorpal.log("user remove|delete <nickname>");
|
|
vorpal.log("<nickname>: user nickname");
|
|
|
|
vorpal.log("---");
|
|
|
|
vorpal.log("returning 0 or 1 and printing errors");
|
|
}
|
|
}
|
|
|
|
cb();
|
|
} else {
|
|
vorpal.exec('user --help');
|
|
cb();
|
|
}
|
|
}
|
|
}
|
|
};
|