Skip to content

Commit

Permalink
Merge pull request #7085 from RocketChat/message-by-id-api
Browse files Browse the repository at this point in the history
[NEW] API method and REST Endpoint for getting a single message by id
  • Loading branch information
rodrigok authored May 31, 2017
2 parents 27da645 + de2ed50 commit 3667f37
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 0 deletions.
22 changes: 22 additions & 0 deletions packages/rocketchat-api/server/v1/chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
1 change: 1 addition & 0 deletions packages/rocketchat-lib/package.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
19 changes: 19 additions & 0 deletions packages/rocketchat-lib/server/methods/getSingleMessage.js
Original file line number Diff line number Diff line change
@@ -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;
}
});
15 changes: 15 additions & 0 deletions tests/end-to-end/api/05-chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 3667f37

Please sign in to comment.