controllers/users refactor

v1.18.x
barisusakli 8 years ago
parent 566ff95d3c
commit 2188036148

@ -8,9 +8,7 @@ var pagination = require('../pagination');
var db = require('../database');
var helpers = require('./helpers');
var usersController = {};
var usersController = module.exports;
usersController.index = function (req, res, next) {
var section = req.query.section || 'joindate';
@ -33,6 +31,8 @@ usersController.index = function (req, res, next) {
};
usersController.search = function (req, res, next) {
async.waterfall([
function (next) {
async.parallel({
search: function (next) {
user.search({
@ -48,21 +48,22 @@ usersController.search = function (req, res, next) {
isAdminOrGlobalMod: function (next) {
user.isAdminOrGlobalMod(req.uid, next);
},
}, function (err, results) {
if (err) {
return next(err);
}
}, next);
},
function (results, next) {
var section = req.query.section || 'joindate';
results.search.isAdminOrGlobalMod = results.isAdminOrGlobalMod;
results.search.pagination = pagination.create(req.query.page, results.search.pageCount, req.query);
results.search['section_' + section] = true;
render(req, res, results.search, next);
});
},
], next);
};
usersController.getOnlineUsers = function (req, res, next) {
async.waterfall([
function (next) {
async.parallel({
users: function (next) {
usersController.getUsers('users:online', req.uid, req.query, next);
@ -70,10 +71,9 @@ usersController.getOnlineUsers = function (req, res, next) {
guests: function (next) {
require('../socket.io/admin/rooms').getTotalGuestCount(next);
},
}, function (err, results) {
if (err) {
return next(err);
}
}, next);
},
function (results, next) {
var userData = results.users;
var hiddenCount = 0;
if (!userData.isAdminOrGlobalMod) {
@ -88,7 +88,8 @@ usersController.getOnlineUsers = function (req, res, next) {
userData.anonymousUserCount = results.guests + hiddenCount;
render(req, res, userData, next);
});
},
], next);
};
usersController.getUsersSortedByPosts = function (req, res, next) {
@ -107,41 +108,36 @@ usersController.getUsersSortedByJoinDate = function (req, res, next) {
};
usersController.getBannedUsers = function (req, res, next) {
usersController.getUsers('users:banned', req.uid, req.query, function (err, userData) {
if (err) {
return next(err);
}
if (!userData.isAdminOrGlobalMod) {
return next();
}
render(req, res, userData, next);
});
renderIfAdminOrGlobalMod('users:banned', req, res, next);
};
usersController.getFlaggedUsers = function (req, res, next) {
usersController.getUsers('users:flags', req.uid, req.query, function (err, userData) {
if (err) {
return next(err);
}
if (!userData.isAdminOrGlobalMod) {
return next();
}
render(req, res, userData, next);
});
renderIfAdminOrGlobalMod('users:flags', req, res, next);
};
usersController.renderUsersPage = function (set, req, res, next) {
usersController.getUsers(set, req.uid, req.query, function (err, userData) {
if (err) {
return next(err);
function renderIfAdminOrGlobalMod(set, req, res, next) {
async.waterfall([
function (next) {
user.isAdminOrGlobalMod(req.uid, next);
},
function (isAdminOrGlobalMod, next) {
if (!isAdminOrGlobalMod) {
return helpers.notAllowed(req, res);
}
usersController.renderUsersPage(set, req, res, next);
},
], next);
}
usersController.renderUsersPage = function (set, req, res, next) {
async.waterfall([
function (next) {
usersController.getUsers(set, req.uid, req.query, next);
},
function (userData, next) {
render(req, res, userData, next);
});
},
], next);
};
usersController.getUsers = function (set, uid, query, callback) {
@ -169,6 +165,8 @@ usersController.getUsers = function (set, uid, query, callback) {
var start = Math.max(0, page - 1) * resultsPerPage;
var stop = start + resultsPerPage - 1;
async.waterfall([
function (next) {
async.parallel({
isAdminOrGlobalMod: function (next) {
user.isAdminOrGlobalMod(uid, next);
@ -176,11 +174,9 @@ usersController.getUsers = function (set, uid, query, callback) {
usersData: function (next) {
usersController.getUsersAndCount(set, uid, start, stop, next);
},
}, function (err, results) {
if (err) {
return callback(err);
}
}, next);
},
function (results, next) {
var pageCount = Math.ceil(results.usersData.count / resultsPerPage);
var userData = {
users: results.usersData.users,
@ -191,11 +187,14 @@ usersController.getUsers = function (set, uid, query, callback) {
isAdminOrGlobalMod: results.isAdminOrGlobalMod,
};
userData['section_' + (query.section || 'joindate')] = true;
callback(null, userData);
});
next(null, userData);
},
], callback);
};
usersController.getUsersAndCount = function (set, uid, start, stop, callback) {
async.waterfall([
function (next) {
async.parallel({
users: function (next) {
user.getUsersFromSet(set, uid, start, stop, next);
@ -212,16 +211,16 @@ usersController.getUsersAndCount = function (set, uid, start, stop, callback) {
db.getObjectField('global', 'userCount', next);
}
},
}, function (err, results) {
if (err) {
return callback(err);
}
}, next);
},
function (results, next) {
results.users = results.users.filter(function (user) {
return user && parseInt(user.uid, 10);
});
callback(null, results);
});
next(null, results);
},
], callback);
};
function render(req, res, data, next) {
@ -232,16 +231,15 @@ function render(req, res, data, next) {
data.adminInviteOnly = registrationType === 'admin-invite-only';
data['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1;
user.getInvitesNumber(req.uid, function (err, numInvites) {
if (err) {
return next(err);
}
async.waterfall([
function (next) {
user.getInvitesNumber(req.uid, next);
},
function (numInvites) {
res.append('X-Total-Count', data.userCount);
data.invites = numInvites;
res.render('users', data);
});
},
], next);
}
module.exports = usersController;

@ -53,22 +53,24 @@ middleware.ensureSelfOrGlobalPrivilege = function (req, res, next) {
The "self" part of this middleware hinges on you having used
middleware.exposeUid prior to invoking this middleware.
*/
if (req.user) {
if (req.user.uid === res.locals.uid) {
return next();
async.waterfall([
function (next) {
if (!req.uid) {
return setImmediate(next, null, false);
}
user.isAdminOrGlobalMod(req.uid, function (err, ok) {
if (err) {
return next(err);
} else if (ok) {
return next();
if (req.uid === parseInt(res.locals.uid, 10)) {
return setImmediate(next, null, true);
}
controllers.helpers.notAllowed(req, res);
});
} else {
controllers.helpers.notAllowed(req, res);
user.isAdminOrGlobalMod(req.uid, next);
},
function (isAdminOrGlobalMod, next) {
if (!isAdminOrGlobalMod) {
return controllers.helpers.notAllowed(req, res);
}
next();
},
], next);
};
middleware.pageView = function (req, res, next) {

Loading…
Cancel
Save