diff --git a/packages/rocketchat-api/server/v1/chat.js b/packages/rocketchat-api/server/v1/chat.js index a003368c9c1..4404750300f 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 a6360892d67..3042469d88f 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 00000000000..72dc1a8516a --- /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; + } +});