Improve the commands and add permission nodes to the commands

pull/9666/head
Bradley Hilton 8 years ago
parent f65ca7a63a
commit 9a609bf6d6
No known key found for this signature in database
GPG Key ID: 0666B2C24C43C358
  1. 1
      packages/rocketchat-lib/lib/slashCommand.js
  2. 3
      packages/rocketchat-rocketlets/client/communication/index.js
  3. 30
      packages/rocketchat-rocketlets/client/communication/restclient.js
  4. 7
      packages/rocketchat-rocketlets/client/orchestrator.js
  5. 3
      packages/rocketchat-rocketlets/server/orchestrator.js
  6. 4
      packages/rocketchat-slashcommands-archiveroom/client.js
  7. 5
      packages/rocketchat-slashcommands-archiveroom/package.js
  8. 4
      packages/rocketchat-slashcommands-create/client.js
  9. 2
      packages/rocketchat-slashcommands-create/package.js
  10. 3
      packages/rocketchat-slashcommands-help/client.js
  11. 1
      packages/rocketchat-slashcommands-help/package.js
  12. 4
      packages/rocketchat-slashcommands-help/server.js
  13. 4
      packages/rocketchat-slashcommands-invite/client.js
  14. 2
      packages/rocketchat-slashcommands-invite/package.js
  15. 8
      packages/rocketchat-slashcommands-inviteall/client.js
  16. 1
      packages/rocketchat-slashcommands-inviteall/package.js
  17. 2
      packages/rocketchat-slashcommands-inviteall/server.js
  18. 10
      packages/rocketchat-slashcommands-kick/client.js
  19. 2
      packages/rocketchat-slashcommands-kick/package.js
  20. 3
      packages/rocketchat-slashcommands-kick/server.js
  21. 4
      packages/rocketchat-slashcommands-leave/leave.js
  22. 3
      packages/rocketchat-slashcommands-leave/package.js
  23. 1
      packages/rocketchat-slashcommands-me/me.js
  24. 2
      packages/rocketchat-slashcommands-me/package.js
  25. 4
      packages/rocketchat-slashcommands-msg/client.js
  26. 2
      packages/rocketchat-slashcommands-msg/package.js
  27. 5
      packages/rocketchat-slashcommands-msg/server.js
  28. 4
      packages/rocketchat-slashcommands-mute/client/mute.js
  29. 4
      packages/rocketchat-slashcommands-mute/client/unmute.js
  30. 8
      packages/rocketchat-slashcommands-mute/package.js
  31. 3
      packages/rocketchat-slashcommands-mute/server/mute.js
  32. 3
      packages/rocketchat-slashcommands-mute/server/unmute.js
  33. 4
      packages/rocketchat-slashcommands-unarchiveroom/client.js
  34. 6
      packages/rocketchat-slashcommands-unarchiveroom/package.js
  35. 5
      packages/rocketchat-slashcommands-unarchiveroom/server.js
  36. 22
      packages/rocketchat-ui-message/client/popup/messagePopupConfig.js
  37. 15
      packages/rocketchat-ui/client/lib/chatMessages.js

@ -8,6 +8,7 @@ RocketChat.slashCommands.add = function(command, callback, options = {}, result)
callback,
params: options.params,
description: options.description,
permission: options.permission,
clientOnly: options.clientOnly || false,
result
};

@ -1,4 +1,3 @@
import { RocketletRestApiClient } from './restclient';
import { RocketletWebsocketReceiver } from './websockets';
export { RocketletRestApiClient, RocketletWebsocketReceiver };
export { RocketletWebsocketReceiver };

@ -1,30 +0,0 @@
export class RocketletRestApiClient {
constructor(orch) {
this.orch = orch;
}
get(endpoint, params) {
return this._jqueryCall('GET', endpoint, params);
}
_jqueryCall(method, endpoint, params) {
return new Promise(function _rlRestApiGet(resolve, reject) {
jQuery.ajax({
method,
url: `${ Meteor.absoluteUrl() }api/${ endpoint }`,
headers: {
'Content-Type': 'application/json',
'X-User-Id': localStorage['Meteor.userId'],
'X-Auth-Token': localStorage['Meteor.loginToken']
},
data: params,
success: function _rlGetSuccess(result) {
resolve(result);
},
error: function _rlGetFailure(xhr, status, errorThrown) {
reject(new Error(errorThrown));
}
});
});
}
}

@ -1,18 +1,13 @@
import { RocketletRestApiClient, RocketletWebsocketReceiver } from './communication';
import { RocketletWebsocketReceiver } from './communication';
class RocketletClientOrchestrator {
constructor() {
this.ws = new RocketletWebsocketReceiver(this);
this.rest = new RocketletRestApiClient(this);
}
getWsListener() {
return this.ws;
}
getRestApiClient() {
return this.rest;
}
}
Meteor.startup(function _rlClientOrch() {

@ -1,5 +1,5 @@
import { RealRocketletBridges } from './bridges';
import { RocketletsRestApi, RocketletWebsocketNotifier } from './communication';
import { RocketletWebsocketNotifier } from './communication';
import { RocketletMessagesConverter, RocketletRoomsConverter, RocketletSettingsConverter, RocketletUsersConverter } from './converters';
import { RocketletsModel, RocketletRealStorage } from './storage';
@ -21,7 +21,6 @@ class RocketletServerOrchestrator {
this._manager = new RocketletManager(this._storage, this._bridges);
this._communicators = new Map();
this._communicators.set('restapi', new RocketletsRestApi(this._manager));
this._communicators.set('notifier', new RocketletWebsocketNotifier());
}

@ -1,4 +0,0 @@
RocketChat.slashCommands.add('archive', null, {
description: 'Archive',
params: '#channel'
});

@ -6,7 +6,6 @@ Package.describe({
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'check',
@ -15,7 +14,5 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('messages.js', 'server');
api.addFiles('server.js', 'server');
api.addFiles(['messages.js', 'server.js'], 'server');
});

@ -1,4 +0,0 @@
RocketChat.slashCommands.add('create', null, {
description: 'Create_A_New_Channel',
params: '#channel'
});

@ -6,7 +6,6 @@ Package.describe({
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'check',
@ -15,6 +14,5 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('server.js', 'server');
});

@ -1,3 +0,0 @@
RocketChat.slashCommands.add('help', undefined, {
description: 'Show_the_keyboard_shortcut_list'
});

@ -15,6 +15,5 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('server.js', 'server');
});

@ -6,10 +6,6 @@
RocketChat.slashCommands.add('help', function Help(command, params, item) {
if (command !== 'help') {
return;
}
const user = Meteor.users.findOne(Meteor.userId());
const keys = [{
'Open_channel_user_search': 'Command (or Ctrl) + p OR Command (or Ctrl) + k'

@ -1,4 +0,0 @@
RocketChat.slashCommands.add('invite', undefined, {
description: 'Invite_user_to_join_channel',
params: '@username'
});

@ -6,7 +6,6 @@ Package.describe({
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'check',
@ -15,6 +14,5 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('server.js', 'server');
});

@ -1,8 +0,0 @@
RocketChat.slashCommands.add('invite-all-to', undefined, {
description: 'Invite_user_to_join_channel_all_to',
params: '#room'
});
RocketChat.slashCommands.add('invite-all-from', undefined, {
description: 'Invite_user_to_join_channel_all_from',
params: '#room'
});

@ -15,6 +15,5 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('server.js', 'server');
});

@ -4,7 +4,6 @@
*/
function inviteAll(type) {
return function inviteAll(command, params, item) {
if (!/invite\-all-(to|from)/.test(command) || !Match.test(params, String)) {
@ -76,6 +75,7 @@ function inviteAll(type) {
}
};
}
RocketChat.slashCommands.add('invite-all-to', inviteAll('to'), {
description: 'Invite_user_to_join_channel_all_to',
params: '#room'

@ -1,10 +0,0 @@
RocketChat.slashCommands.add('kick', function(command, params) {
const username = params.trim();
if (username === '') {
return;
}
return username.replace('@', '');
}, {
description: 'Remove_someone_from_room',
params: '@username'
});

@ -6,7 +6,6 @@ Package.describe({
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'check',
@ -15,6 +14,5 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('server.js', 'server');
});

@ -39,5 +39,6 @@ const Kick = function(command, params, {rid}) {
RocketChat.slashCommands.add('kick', Kick, {
description: 'Remove_someone_from_room',
params: '@username'
params: '@username',
permission: 'remove-user'
});

@ -20,5 +20,5 @@ function Leave(command, params, item) {
}
}
RocketChat.slashCommands.add('leave', Meteor.isClient ? undefined : Leave, { description: 'Leave_the_current_channel' });
RocketChat.slashCommands.add('part', Meteor.isClient ? undefined : Leave, { description: 'Leave_the_current_channel' });
RocketChat.slashCommands.add('leave', Leave, { description: 'Leave_the_current_channel' });
RocketChat.slashCommands.add('part', Leave, { description: 'Leave_the_current_channel' });

@ -10,5 +10,6 @@ Package.onUse(function(api) {
'ecmascript',
'rocketchat:lib'
]);
api.addFiles('leave.js');
api.addFiles('leave.js', 'server');
});

@ -7,6 +7,7 @@ RocketChat.slashCommands.add('me', function Me(command, params, item) {
if (command !== 'me') {
return;
}
if (_.trim(params)) {
const msg = item;
msg.msg = `_${ params }_`;

@ -11,5 +11,5 @@ Package.onUse(function(api) {
'rocketchat:lib'
]);
api.addFiles('me.js', ['server', 'client']);
api.addFiles('me.js', 'server');
});

@ -1,4 +0,0 @@
RocketChat.slashCommands.add('msg', undefined, {
description: 'Direct_message_someone',
params: '@username <message>'
});

@ -6,7 +6,6 @@ Package.describe({
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'check',
@ -15,6 +14,5 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('server.js', 'server');
});

@ -43,4 +43,7 @@ function Msg(command, params, item) {
Meteor.call('sendMessage', msgObject);
}
RocketChat.slashCommands.add('msg', Msg);
RocketChat.slashCommands.add('msg', Msg, {
description: 'Direct_message_someone',
params: '@username <message>'
});

@ -1,4 +0,0 @@
RocketChat.slashCommands.add('mute', undefined, {
description: 'Mute_someone_in_room',
params: '@username'
});

@ -1,4 +0,0 @@
RocketChat.slashCommands.add('unmute', undefined, {
description: 'Unmute_someone_in_room',
params: '@username'
});

@ -6,17 +6,11 @@ Package.describe({
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'check',
'rocketchat:lib'
]);
api.use('templating', 'client');
api.addFiles('client/mute.js', 'client');
api.addFiles('client/unmute.js', 'client');
api.addFiles('server/mute.js', 'server');
api.addFiles('server/unmute.js', 'server');
api.addFiles(['server/mute.js', 'server/unmute.js'], 'server');
});

@ -42,4 +42,7 @@ RocketChat.slashCommands.add('mute', function Mute(command, params, item) {
rid: item.rid,
username
});
}, {
description: 'Mute_someone_in_room',
params: '@username'
});

@ -41,4 +41,7 @@ RocketChat.slashCommands.add('unmute', function Unmute(command, params, item) {
rid: item.rid,
username
});
}, {
description: 'Unmute_someone_in_room',
params: '@username'
});

@ -1,4 +0,0 @@
RocketChat.slashCommands.add('unarchive', null, {
description: 'Unarchive',
params: '#channel'
});

@ -13,9 +13,5 @@ Package.onUse(function(api) {
'rocketchat:lib'
]);
api.use('templating', 'client');
api.addFiles('client.js', 'client');
api.addFiles('messages.js', 'server');
api.addFiles('server.js', 'server');
api.addFiles(['messages.js', 'server.js'], 'server');
});

@ -50,4 +50,7 @@ function Unarchive(command, params, item) {
return Unarchive;
}
RocketChat.slashCommands.add('unarchive', Unarchive);
RocketChat.slashCommands.add('unarchive', Unarchive, {
description: 'Unarchive',
params: '#channel'
});

@ -236,14 +236,22 @@ Template.messagePopupConfig.helpers({
return {
_id: command,
params: item.params ? TAPi18n.__(item.params) : '',
description: TAPi18n.__(item.description)
description: TAPi18n.__(item.description),
permission: item.permission
};
})
.filter(command => command._id.indexOf(filter) > -1)
.sort(function(a, b) {
return a._id > b._id;
})
.slice(0, 11);
}).filter(command => {
const isMatch = command._id.indexOf(filter) > -1;
if (!isMatch) {
return false;
}
if (!command.permission) {
return true;
}
return RocketChat.authz.hasAtLeastOnePermission(command.permission, Session.get('openedRoom'));
}).sort((a, b) => a._id > b._id).slice(0, 11);
}
};
return config;

@ -217,12 +217,16 @@ this.ChatMessages = class ChatMessages {
const commandOptions = RocketChat.slashCommands.commands[match[1]];
command = match[1];
const param = match[2] || '';
if (commandOptions.clientOnly) {
commandOptions.callback(command, param, msgObject);
} else {
Meteor.call('slashCommand', {cmd: command, params: param, msg: msgObject }, (err, result) => typeof commandOptions.result === 'function' && commandOptions.result(err, result, {cmd: command, params: param, msg: msgObject }));
if (!commandOptions.permission || RocketChat.authz.hasAtLeastOnePermission(commandOptions.permission, Session.get('openedRoom'))) {
if (commandOptions.clientOnly) {
commandOptions.callback(command, param, msgObject);
} else {
Meteor.call('slashCommand', {cmd: command, params: param, msg: msgObject }, (err, result) => typeof commandOptions.result === 'function' && commandOptions.result(err, result, {cmd: command, params: param, msg: msgObject }));
}
return;
}
return;
}
if (!RocketChat.settings.get('Message_AllowUnrecognizedSlashCommand')) {
@ -236,6 +240,7 @@ this.ChatMessages = class ChatMessages {
},
private: true
};
ChatMessage.upsert({ _id: invalidCommandMsg._id }, invalidCommandMsg);
return;
}

Loading…
Cancel
Save