The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Rocket.Chat/server/methods/channelsList.js

89 lines
1.9 KiB

Meteor.methods({
channelsList(filter, channelType, limit, sort) {
this.unblock();
check(filter, String);
check(channelType, String);
check(limit, Match.Optional(Number));
check(sort, Match.Optional(String));
if (!Meteor.userId()) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'channelsList'
});
}
const options = {
fields: {
name: 1,
t: 1
},
sort: {
msgs: -1
}
};
if (_.isNumber(limit)) {
options.limit = limit;
}
if (_.trim(sort)) {
switch (sort) {
case 'name':
options.sort = {
name: 1
};
break;
case 'msgs':
options.sort = {
msgs: -1
};
}
}
const roomTypes = [];
if (channelType !== 'private') {
if (RocketChat.authz.hasPermission(Meteor.userId(), 'view-c-room')) {
roomTypes.push({
type: 'c'
});
} else if (RocketChat.authz.hasPermission(Meteor.userId(), 'view-joined-room')) {
const roomIds = _.pluck(RocketChat.models.Subscriptions.findByTypeAndUserId('c', Meteor.userId()).fetch(), 'rid');
roomTypes.push({
type: 'c',
ids: roomIds
});
}
}
if (channelType !== 'public' && RocketChat.authz.hasPermission(Meteor.userId(), 'view-p-room')) {
const userPref = Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.mergeChannels;
const globalPref = RocketChat.settings.get('UI_Merge_Channels_Groups');
const mergeChannels = userPref || globalPref;
if (mergeChannels) {
roomTypes.push({
type: 'p',
username: Meteor.user().username
});
}
}
if (roomTypes.length) {
if (filter) {
return {
channels: RocketChat.models.Rooms.findByNameContainingTypesWithUsername(filter, roomTypes, options).fetch()
};
}
return {
channels: RocketChat.models.Rooms.findContainingTypesWithUsername(roomTypes, options).fetch()
};
}
return {
channels: []
};
}
});