more flagged posts shenanigans

This commit is contained in:
barisusakli
2016-02-03 18:21:34 +02:00
parent 086e99de5c
commit e6cf8ec5cf
8 changed files with 105 additions and 74 deletions

View File

@@ -39,12 +39,13 @@ SocketAdmin.before = function(socket, method, data, next) {
if (!socket.uid) {
return;
}
user.isAdministrator(socket.uid, function(err, isAdmin) {
if (!err && isAdmin) {
next();
} else {
winston.warn('[socket.io] Call to admin method ( ' + method + ' ) blocked (accessed by uid ' + socket.uid + ')');
if (err || isAdmin) {
return next(err);
}
winston.warn('[socket.io] Call to admin method ( ' + method + ' ) blocked (accessed by uid ' + socket.uid + ')');
});
};
@@ -323,36 +324,5 @@ SocketAdmin.deleteAllEvents = function(socket, data, callback) {
events.deleteAll(callback);
};
SocketAdmin.dismissFlag = function(socket, pid, callback) {
if (!pid) {
return callback('[[error:invalid-data]]');
}
posts.dismissFlag(pid, callback);
};
SocketAdmin.dismissAllFlags = function(socket, data, callback) {
posts.dismissAllFlags(callback);
};
SocketAdmin.getMoreFlags = function(socket, data, callback) {
if (!data || !parseInt(data.after, 10)) {
return callback('[[error:invalid-data]]');
}
var sortBy = data.sortBy || 'count';
var byUsername = data.byUsername || '';
var start = parseInt(data.after, 10);
var stop = start + 19;
if (byUsername) {
posts.getUserFlags(byUsername, sortBy, socket.uid, start, stop, function(err, posts) {
callback(err, {posts: posts, next: stop + 1});
});
} else {
var set = sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged';
posts.getFlags(set, socket.uid, start, stop, function(err, posts) {
callback(err, {posts: posts, next: stop + 1});
});
}
};
module.exports = SocketAdmin;

View File

@@ -98,4 +98,66 @@ module.exports = function(SocketPosts) {
}
], callback);
};
SocketPosts.dismissFlag = function(socket, pid, callback) {
if (!pid || !socket.uid) {
return callback('[[error:invalid-data]]');
}
async.waterfall([
function (next) {
user.isAdminOrGlobalModerator(socket.uid, next);
},
function (isAdminOrGlobalModerator, next) {
if (!isAdminOrGlobalModerator) {
return next(new Error('[[no-privileges]]'));
}
posts.dismissFlag(pid, next);
}
], callback);
};
SocketPosts.dismissAllFlags = function(socket, data, callback) {
async.waterfall([
function (next) {
user.isAdminOrGlobalModerator(socket.uid, next);
},
function (isAdminOrGlobalModerator, next) {
if (!isAdminOrGlobalModerator) {
return next(new Error('[[no-privileges]]'));
}
posts.dismissAllFlags(next);
}
], callback);
};
SocketPosts.getMoreFlags = function(socket, data, callback) {
if (!data || !parseInt(data.after, 10)) {
return callback('[[error:invalid-data]]');
}
var sortBy = data.sortBy || 'count';
var byUsername = data.byUsername || '';
var start = parseInt(data.after, 10);
var stop = start + 19;
async.waterfall([
function (next) {
user.isAdminOrGlobalModerator(socket.uid, next);
},
function (isAdminOrGlobalModerator, next) {
if (!isAdminOrGlobalModerator) {
return next(new Error('[[no-privileges]]'));
}
if (byUsername) {
posts.getUserFlags(byUsername, sortBy, socket.uid, start, stop, next);
} else {
var set = sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged';
posts.getFlags(set, socket.uid, start, stop, next);
}
},
function (posts, next) {
next(null, {posts: posts, next: stop + 1});
},
], callback);
};
};

View File

@@ -34,13 +34,10 @@ module.exports = function(SocketUser) {
async.waterfall([
function (next) {
async.parallel({
isAdmin: async.apply(user.isAdministrator, uid),
isGlobalMod: async.apply(user.isGlobalModerator, uid)
}, next);
user.isAdminOrGlobalMod(uid, next);
},
function (results, next) {
if (!results.isAdmin && !results.isGlobalMod) {
function (isAdminOrGlobalMod, next) {
if (!isAdminOrGlobalMod) {
return next(new Error('[[error:no-privileges]]'));
}
async.each(uids, method, next);