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

'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;
};
};