You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
const user = require('../../user');
|
|
const pagination = require('../../pagination');
|
|
const privileges = require('../../privileges');
|
|
|
|
module.exports = function (SocketUser) {
|
|
SocketUser.search = async function (socket, data) {
|
|
// TODO: depracate and use usersController.search
|
|
if (!data) {
|
|
throw new Error('[[error:invalid-data]]');
|
|
}
|
|
const [allowed, isPrivileged] = await Promise.all([
|
|
privileges.global.can('search:users', socket.uid),
|
|
user.isPrivileged(socket.uid),
|
|
]);
|
|
|
|
let filters = data.filters || [];
|
|
filters = Array.isArray(filters) ? filters : [filters];
|
|
if (!allowed ||
|
|
((
|
|
data.searchBy === 'ip' ||
|
|
data.searchBy === 'email' ||
|
|
filters.includes('banned') ||
|
|
filters.includes('flagged')
|
|
) && !isPrivileged)
|
|
) {
|
|
throw new Error('[[error:no-privileges]]');
|
|
}
|
|
const result = await user.search({
|
|
query: data.query,
|
|
page: data.page,
|
|
searchBy: data.searchBy,
|
|
sortBy: data.sortBy,
|
|
filters: data.filters,
|
|
paginate: data.paginate,
|
|
uid: socket.uid,
|
|
});
|
|
result.pagination = pagination.create(data.page, result.pageCount);
|
|
result['route_users:' + data.sortBy] = true;
|
|
return result;
|
|
};
|
|
};
|