diff --git a/src/user.js b/src/user.js index 1adb0c65a4..bdd85914c7 100644 --- a/src/user.js +++ b/src/user.js @@ -12,27 +12,26 @@ var utils = require('./../public/src/utils.js'), (function(User) { User.getUserField = function(uid, field, callback) { RDB.hget('user:' + uid, field, function(err, data) { - if(err === null) + if(err === null) { callback(data); - else + } else { console.log(err); + } }); } - + User.getUserFields = function(uid, fields, callback) { RDB.hmget('user:' + uid, fields, function(err, data) { if(err === null) { - var returnData = {}; - - for(var i=0, ii=fields.length; i 150) { callback({error:'Signature can\'t be longer than 150 characters!'}); return; } - - - for(var i=0,ii=fields.length; i= uids.length) + if(usernames.length >= uids.length) { callback(usernames); + } }); } } @@ -515,59 +527,75 @@ var utils = require('./../public/src/utils.js'), User.get_userslugs_by_uids = function(uids, callback) { var userslugs = []; - if (!Array.isArray(uids)) return callback([]); - + if (!Array.isArray(uids)) { + return callback([]); + } + + // @todo - rework this logic. it doesn't make much sense when you're going through + // each and then placing the check logic into the innermost callback. + // this is probably a situation where an async.method is ideal for(var i=0, ii=uids.length; i= uids.length) + if(userslugs.length >= uids.length) { callback(userslugs); + } }); } } User.get_uid_by_email = function(email, callback) { RDB.get('email:' + email + ':uid', function(err, data) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } callback(data); }); }; User.get_uid_by_session = function(session, callback) { RDB.get('sess:' + session + ':uid', function(err, data) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } callback(data); }); }; User.get_uid_by_twitter_id = function(twid, callback) { RDB.hget('twid:uid', twid, function(err, uid) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } callback(uid); }); } User.get_uid_by_google_id = function(gplusid, callback) { RDB.hget('gplusid:uid', gplusid, function(err, uid) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } callback(uid); - }); + }); } User.get_uid_by_fbid = function(fbid, callback) { RDB.hget('fbid:uid', fbid, function(err, uid) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } callback(uid); - }); + }); } User.session_ping = function(sessionID, uid) { // Start, replace, or extend a session RDB.get('sess:' + sessionID, function(err, session) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } var expiry = 60*60*24*14, // Login valid for two weeks sess_key = 'sess:' + sessionID + ':uid', @@ -582,61 +610,84 @@ var utils = require('./../public/src/utils.js'), User.isModerator = function(uid, cid, callback) { RDB.sismember('cid:' + cid + ':moderators', uid, function(err, exists) { + // @todo handle error callback(!!exists); }); } User.isAdministrator = function(uid, callback) { RDB.sismember('administrators', uid, function(err, exists) { + // @todo handle error callback(!!exists); }); } User.makeAdministrator = function(uid, callback) { RDB.sadd('administrators', uid, function(err, data){ - if(err === null) { + if(!err) { User.setUserField(uid, 'administrator', 1); } - if(callback) + + if(callback) { + // @todo address why we're only sending back a boolean in the callback and not an error if it occurred callback(err === null); + } }); } User.removeAdministrator = function(uid, callback) { RDB.srem('administrators', uid, function(err, data){ - if(err === null) { + if(!err) { User.setUserField(uid, 'administrator', 0); } - if(callback) + + if(callback) { + // @todo address why we're only sending back a boolean in the callback and not an error if it occurred callback(err === null); + } }); - } + } User.reset = { validate: function(socket, code, callback) { - if (typeof callback !== 'function') callback = undefined; + if (typeof callback !== 'function') { + callback = null; + } RDB.get('reset:' + code + ':uid', function(err, uid) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } if (uid !== null) { RDB.get('reset:' + code + ':expiry', function(err, expiry) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } - if (expiry >= +new Date()/1000|0) { - if (!callback) socket.emit('user:reset.valid', { valid: true }); - else callback(true); + if (expiry >= +Date.now()/1000|0) { + if (!callback) { + socket.emit('user:reset.valid', { valid: true }); + } else { + callback(true); + } } else { // Expired, delete from db RDB.del('reset:' + code + ':uid'); RDB.del('reset:' + code + ':expiry'); - if (!callback) socket.emit('user:reset.valid', { valid: false }); - else callback(false); + if (!callback) { + socket.emit('user:reset.valid', { valid: false }); + } else { + callback(false); + } } }); } else { - if (!callback) socket.emit('user:reset.valid', { valid: false }); - else callback(false); + if (!callback) { + socket.emit('user:reset.valid', { valid: false }); + } else { + callback(false); + } } }); }, @@ -664,7 +715,7 @@ var utils = require('./../public/src/utils.js'), } ] }); - + emailjsServer.send(message, function(err, success) { if (err === null) { socket.emit('user.send_reset', { @@ -677,6 +728,7 @@ var utils = require('./../public/src/utils.js'), status: "error", message: "send-failed" }); + // @todo handle error properly throw new Error(err); } }); @@ -693,7 +745,9 @@ var utils = require('./../public/src/utils.js'), this.validate(code, function(validated) { if (validated) { RDB.get('reset:' + code + ':uid', function(err, uid) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } User.setUserField(uid, 'password', password); RDB.del('reset:' + code + ':uid'); @@ -710,24 +764,25 @@ var utils = require('./../public/src/utils.js'), exists: function(socket, email, callback) { User.get_uid_by_email(email, function(exists) { exists = !!exists; - if (typeof callback !== 'function') socket.emit('user.email.exists', { exists: exists }); - else callback(exists); + if (typeof callback !== 'function') { + socket.emit('user.email.exists', { exists: exists }); + } else { + callback(exists); + } }); }, confirm: function(code, callback) { RDB.get('confirm:' + code + ':email', function(err, email) { - RDB.handle(err); + if (err) { + RDB.handle(err); + } if (email !== null) { RDB.set('email:' + email + ':confirm', true); RDB.del('confirm:' + code + ':email'); - callback({ - status: 'ok' - }); + callback({ status: 'ok' }); } else { - callback({ - status: 'not_ok' - }); + callback({ status: 'not_ok' }); } }); } @@ -735,19 +790,24 @@ var utils = require('./../public/src/utils.js'), User.get_online_users = function(socket, uids) { RDB.sismembers('users:online', uids, function(err, data) { + // @todo handle err socket.emit('api:user.get_online_users', data); - }); + }); }; User.go_online = function(uid) { RDB.sadd('users:online', uid, function(err) { - if (err) RDB.handle(err); + if (err) { + RDB.handle(err); + } }); }; User.go_offline = function(uid) { RDB.srem('users:online', uid, function(err) { - if (err) RDB.handle(err); + if (err) { + RDB.handle(err); + } }); }; @@ -756,7 +816,7 @@ var utils = require('./../public/src/utils.js'), get_record : function(socket) { RDB.mget(['global:active_user_record', 'global:active_user_record_date'], function(err, data) { RDB.handle(err); - socket.emit('api:user.active.get_record', {record: data[0], timestamp: data[1]}); + socket.emit('api:user.active.get_record', { record: data[0], timestamp: data[1] }); }); }, @@ -828,6 +888,7 @@ var utils = require('./../public/src/utils.js'), async.parallel({ unread: function(next) { RDB.zrevrangebyscore('uid:' + uid + ':notifications:unread', 10, 0, function(err, nids) { + // @todo handle err var unread = []; if (nids && nids.length > 0) { async.eachSeries(nids, function(nid, next) { @@ -838,11 +899,14 @@ var utils = require('./../public/src/utils.js'), }, function(err) { next(null, unread); }); - } else next(null, unread); + } else { + next(null, unread); + } }); }, read: function(next) { RDB.zrevrangebyscore('uid:' + uid + ':notifications:read', 10, 0, function(err, nids) { + // @todo handle err var read = []; if (nids && nids.length > 0) { async.eachSeries(nids, function(nid, next) { @@ -853,32 +917,41 @@ var utils = require('./../public/src/utils.js'), }, function(err) { next(null, read); }); - } else next(null, read); + } else { + next(null, read); + } }); } }, function(err, notifications) { // While maintaining score sorting, sort by time notifications.read.sort(function(a, b) { - if (a.score === b.score) return (a.datetime - b.datetime) > 0 ? -1 : 1; + if (a.score === b.score) { + return (a.datetime - b.datetime) > 0 ? -1 : 1; + } }); notifications.unread.sort(function(a, b) { - if (a.score === b.score) return (a.datetime - b.datetime) > 0 ? -1 : 1; + if (a.score === b.score) { + return (a.datetime - b.datetime) > 0 ? -1 : 1; + } }); callback(notifications); }); }, hasFlag: function(uid, callback) { RDB.get('uid:1:notifications:flag', function(err, flag) { - if (err) RDB.handle(err); + if (err) { + RDB.handle(err); + } - if (flag === '1') callback(true); - else callback(false); + callback(flag === 1); }); }, removeFlag: function(uid) { RDB.del('uid:' + uid + ':notifications:flag', function(err) { - if (err) RDB.handle(err); + if (err) { + RDB.handle(err); + } }); } } -}(exports)); \ No newline at end of file +}(exports));