From 65f6c4fdf6d030a663fc055fc622b1451ebd6ea0 Mon Sep 17 00:00:00 2001 From: graywolf336 Date: Sun, 1 Apr 2018 15:13:40 -0500 Subject: [PATCH 1/3] Fix the chat.react api being invalid --- packages/rocketchat-api/server/v1/chat.js | 6 +++++- packages/rocketchat-reactions/setReaction.js | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-api/server/v1/chat.js b/packages/rocketchat-api/server/v1/chat.js index 69b2a2b9170e..aa8404b75f25 100644 --- a/packages/rocketchat-api/server/v1/chat.js +++ b/packages/rocketchat-api/server/v1/chat.js @@ -267,7 +267,11 @@ RocketChat.API.v1.addRoute('chat.react', { authRequired: true }, { throw new Meteor.Error('error-message-not-found', 'The provided "messageId" does not match any existing message.'); } - const emoji = this.bodyParams.emoji; + const emoji = this.bodyParams.emoji || this.bodyParams.reaction; + + if (!emoji) { + throw new Meteor.Error('error-emoji-param-not-provided', 'The required "emoji" param is missing.'); + } Meteor.runAsUser(this.userId, () => Meteor.call('setReaction', emoji, msg._id)); diff --git a/packages/rocketchat-reactions/setReaction.js b/packages/rocketchat-reactions/setReaction.js index 9d1b5949405b..fd40e3937feb 100644 --- a/packages/rocketchat-reactions/setReaction.js +++ b/packages/rocketchat-reactions/setReaction.js @@ -19,6 +19,8 @@ Meteor.methods({ throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'setReaction' }); } + reaction = `:${ reaction.replace(/:/g, '') }:`; + if (!RocketChat.emoji.list[reaction] && RocketChat.models.EmojiCustom.findByNameOrAlias(reaction).count() === 0) { throw new Meteor.Error('error-not-allowed', 'Invalid emoji provided.', { method: 'setReaction' }); } From 4ae91d03d468cbba88eb613ecf0272617a85bcee Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 2 Apr 2018 13:31:37 -0300 Subject: [PATCH 2/3] Remove duplicated code --- packages/rocketchat-reactions/setReaction.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/rocketchat-reactions/setReaction.js b/packages/rocketchat-reactions/setReaction.js index fd40e3937feb..89df6b8139f6 100644 --- a/packages/rocketchat-reactions/setReaction.js +++ b/packages/rocketchat-reactions/setReaction.js @@ -39,8 +39,6 @@ Meteor.methods({ return false; } - reaction = `:${ reaction.replace(/:/g, '') }:`; - if (message.reactions && message.reactions[reaction] && message.reactions[reaction].usernames.indexOf(user.username) !== -1) { message.reactions[reaction].usernames.splice(message.reactions[reaction].usernames.indexOf(user.username), 1); From 1c06b2c43edb1f8967017a0e98295584f734f2da Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 2 Apr 2018 13:39:36 -0300 Subject: [PATCH 3/3] Add tests for chat.react endpoint --- tests/end-to-end/api/05-chat.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/end-to-end/api/05-chat.js b/tests/end-to-end/api/05-chat.js index 2fc3c944fd2d..9d5b3f21455f 100644 --- a/tests/end-to-end/api/05-chat.js +++ b/tests/end-to-end/api/05-chat.js @@ -193,6 +193,36 @@ describe('[Chat]', function() { }) .end(done); }); + + it('should return statusCode: 200 when the emoji is valid and has no colons', (done) => { + request.post(api('chat.react')) + .set(credentials) + .send({ + emoji: 'bee', + messageId: message._id + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + + it('should return statusCode: 200 for reaction property when the emoji is valid', (done) => { + request.post(api('chat.react')) + .set(credentials) + .send({ + reaction: 'ant', + messageId: message._id + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); }); describe('[/chat.getMessageReadReceipts]', () => {