From e76d6e36f45757d59f572b3251475f26630be38a Mon Sep 17 00:00:00 2001 From: Bradley Hilton Date: Wed, 24 May 2017 16:28:57 -0500 Subject: [PATCH 1/2] Add an api method for getting a single message by id, #6783 --- packages/rocketchat-api/server/v1/chat.js | 22 +++++++++++++++++++ packages/rocketchat-lib/package.js | 1 + .../server/methods/getSingleMessage.js | 19 ++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/rocketchat-lib/server/methods/getSingleMessage.js diff --git a/packages/rocketchat-api/server/v1/chat.js b/packages/rocketchat-api/server/v1/chat.js index a003368c9c1f..4404750300f7 100644 --- a/packages/rocketchat-api/server/v1/chat.js +++ b/packages/rocketchat-api/server/v1/chat.js @@ -28,6 +28,28 @@ RocketChat.API.v1.addRoute('chat.delete', { authRequired: true }, { } }); +RocketChat.API.v1.addRoute('chat.getMessage', { authRequired: true }, { + get() { + if (!this.queryParams.msgId) { + return RocketChat.API.v1.failure('The "msgId" query parameter must be provided.'); + } + + + let msg; + Meteor.runAsUser(this.userId, () => { + msg = Meteor.call('getSingleMessage', this.queryParams.msgId); + }); + + if (!msg) { + return RocketChat.API.v1.failure(); + } + + return RocketChat.API.v1.success({ + message: msg + }); + } +}); + RocketChat.API.v1.addRoute('chat.postMessage', { authRequired: true }, { post() { const messageReturn = processWebhookMessage(this.bodyParams, this.user)[0]; diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index a6360892d67a..3042469d88fa 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -143,6 +143,7 @@ Package.onUse(function(api) { api.addFiles('server/methods/getFullUserData.js', 'server'); api.addFiles('server/methods/getRoomRoles.js', 'server'); api.addFiles('server/methods/getServerInfo.js', 'server'); + api.addFiles('server/methods/getSingleMessage.js', 'server'); api.addFiles('server/methods/getUserRoles.js', 'server'); api.addFiles('server/methods/insertOrUpdateUser.js', 'server'); api.addFiles('server/methods/joinDefaultChannels.js', 'server'); diff --git a/packages/rocketchat-lib/server/methods/getSingleMessage.js b/packages/rocketchat-lib/server/methods/getSingleMessage.js new file mode 100644 index 000000000000..72dc1a8516a3 --- /dev/null +++ b/packages/rocketchat-lib/server/methods/getSingleMessage.js @@ -0,0 +1,19 @@ +Meteor.methods({ + getSingleMessage(msgId) { + check(msgId, String); + + if (!Meteor.userId()) { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'getSingleMessage' }); + } + + const msg = RocketChat.models.Messages.findOneById(msgId); + + if (!msg && !msg.rid) { + return undefined; + } + + Meteor.call('canAccessRoom', msg.rid, Meteor.userId()); + + return msg; + } +}); From de2ed50259266740a4d6410333c262dff5f84e71 Mon Sep 17 00:00:00 2001 From: Bradley Hilton Date: Wed, 24 May 2017 16:34:31 -0500 Subject: [PATCH 2/2] Add a test for the new rest api endpoint --- tests/end-to-end/api/05-chat.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/end-to-end/api/05-chat.js b/tests/end-to-end/api/05-chat.js index d77eaae05d5f..f10ff93932e9 100644 --- a/tests/end-to-end/api/05-chat.js +++ b/tests/end-to-end/api/05-chat.js @@ -57,6 +57,21 @@ describe('[Chat]', function() { .end(done); }); + it('/chat.getMessage', (done) => { + request.get(api('chat.getMessage')) + .set(credentials) + .query({ + msgId: message._id + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.deep.property('message._id', message._id); + }) + .end(done); + }); + it('/chat.update', (done) => { request.post(api('chat.update')) .set(credentials)