/* * This file is part of the authRXBN single sign-on package. * * (c) Ruben Meyer */ module.exports = { 'command': 'user [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 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 [group]"); vorpal.log(": user nickname"); vorpal.log(": will be hashed ASAP"); vorpal.log(": 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 "); vorpal.log(": 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 "); vorpal.log(": user nickname"); vorpal.log(": string"); vorpal.log(": 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 "); vorpal.log(": user nickname"); vorpal.log("---"); vorpal.log("returning 0 or 1 and printing errors"); } } cb(); } else { vorpal.exec('user --help'); cb(); } } } };