From 082473d29cdf32951489b2f92c534ca6659e274d Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Tue, 17 Apr 2018 11:04:17 -0300 Subject: [PATCH] Add user object to responses in /*.files Rest endpoints --- packages/rocketchat-api/package.js | 1 + .../server/helpers/insertUserObject.js | 12 ++++++++++++ packages/rocketchat-api/server/v1/channels.js | 11 +++++++++-- packages/rocketchat-api/server/v1/groups.js | 8 +++++++- packages/rocketchat-api/server/v1/im.js | 8 +++++++- 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 packages/rocketchat-api/server/helpers/insertUserObject.js diff --git a/packages/rocketchat-api/package.js b/packages/rocketchat-api/package.js index d1a8958f6e61..ffc161ed9c77 100644 --- a/packages/rocketchat-api/package.js +++ b/packages/rocketchat-api/package.js @@ -23,6 +23,7 @@ Package.onUse(function(api) { api.addFiles('server/helpers/parseJsonQuery.js', 'server'); api.addFiles('server/helpers/deprecationWarning.js', 'server'); api.addFiles('server/helpers/getLoggedInUser.js', 'server'); + api.addFiles('server/helpers/insertUserObject.js', 'server'); //Add default routes api.addFiles('server/default/info.js', 'server'); diff --git a/packages/rocketchat-api/server/helpers/insertUserObject.js b/packages/rocketchat-api/server/helpers/insertUserObject.js new file mode 100644 index 000000000000..2fac2d280cdc --- /dev/null +++ b/packages/rocketchat-api/server/helpers/insertUserObject.js @@ -0,0 +1,12 @@ +RocketChat.API.helperMethods.set('insertUserObject', function _addUserToObject({ object, userId }) { + const { username, name } = RocketChat.models.Users.findOneById(userId); + + object.user = { + _id: userId, + username, + name + }; + + return object; +}); + diff --git a/packages/rocketchat-api/server/v1/channels.js b/packages/rocketchat-api/server/v1/channels.js index 5cf1321164ad..ac3b962e7235 100644 --- a/packages/rocketchat-api/server/v1/channels.js +++ b/packages/rocketchat-api/server/v1/channels.js @@ -229,6 +229,12 @@ RocketChat.API.v1.addRoute('channels.delete', { authRequired: true }, { RocketChat.API.v1.addRoute('channels.files', { authRequired: true }, { get() { const findResult = findChannelByIdOrName({ params: this.requestParams(), checkedArchived: false }); + const addUserObjectToEveryObject = (file) => { + if (file.userId) { + file = this.insertUserObject({ object: file, userId: file.userId }); + } + return file; + }; Meteor.runAsUser(this.userId, () => { Meteor.call('canAccessRoom', findResult._id, this.userId); @@ -247,8 +253,9 @@ RocketChat.API.v1.addRoute('channels.files', { authRequired: true }, { }).fetch(); return RocketChat.API.v1.success({ - files, - count: files.length, + files: files.map(addUserObjectToEveryObject), + count: + files.length, offset, total: RocketChat.models.Uploads.find(ourQuery).count() }); diff --git a/packages/rocketchat-api/server/v1/groups.js b/packages/rocketchat-api/server/v1/groups.js index 6e12f4b4d225..3826a38bca9d 100644 --- a/packages/rocketchat-api/server/v1/groups.js +++ b/packages/rocketchat-api/server/v1/groups.js @@ -159,6 +159,12 @@ RocketChat.API.v1.addRoute('groups.delete', { authRequired: true }, { RocketChat.API.v1.addRoute('groups.files', { authRequired: true }, { get() { const findResult = findPrivateGroupByIdOrName({ params: this.requestParams(), userId: this.userId, checkedArchived: false }); + const addUserObjectToEveryObject = (file) => { + if (file.userId) { + file = this.insertUserObject({ object: file, userId: file.userId }); + } + return file; + }; const { offset, count } = this.getPaginationItems(); const { sort, fields, query } = this.parseJsonQuery(); @@ -173,7 +179,7 @@ RocketChat.API.v1.addRoute('groups.files', { authRequired: true }, { }).fetch(); return RocketChat.API.v1.success({ - files, + files: files.map(addUserObjectToEveryObject), count: files.length, offset, total: RocketChat.models.Uploads.find(ourQuery).count() diff --git a/packages/rocketchat-api/server/v1/im.js b/packages/rocketchat-api/server/v1/im.js index 4a554f6f585a..6d5905016705 100644 --- a/packages/rocketchat-api/server/v1/im.js +++ b/packages/rocketchat-api/server/v1/im.js @@ -52,6 +52,12 @@ RocketChat.API.v1.addRoute(['dm.close', 'im.close'], { authRequired: true }, { RocketChat.API.v1.addRoute(['dm.files', 'im.files'], { authRequired: true }, { get() { const findResult = findDirectMessageRoom(this.requestParams(), this.user); + const addUserObjectToEveryObject = (file) => { + if (file.userId) { + file = this.insertUserObject({ object: file, userId: file.userId }); + } + return file; + }; const { offset, count } = this.getPaginationItems(); const { sort, fields, query } = this.parseJsonQuery(); @@ -66,7 +72,7 @@ RocketChat.API.v1.addRoute(['dm.files', 'im.files'], { authRequired: true }, { }).fetch(); return RocketChat.API.v1.success({ - files, + files: files.map(addUserObjectToEveryObject), count: files.length, offset, total: RocketChat.models.Uploads.find(ourQuery).count()