From 81a3fb11cc635005d7962ccce0c0ca054f057cb9 Mon Sep 17 00:00:00 2001
From: Marcos Spessatto Defendi <marcos.defendi@ulbra.inf.br>
Date: Fri, 20 Apr 2018 20:47:10 -0300
Subject: [PATCH] Add user object to responses in /*.files Rest endpoints
 (#10480)

---
 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 347eff9d96c..f9704385541 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 00000000000..2fac2d280cd
--- /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 56282d7dbdd..eb76ca5a203 100644
--- a/packages/rocketchat-api/server/v1/channels.js
+++ b/packages/rocketchat-api/server/v1/channels.js
@@ -236,6 +236,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);
@@ -254,8 +260,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 6e12f4b4d22..3826a38bca9 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 4a554f6f585..6d590501670 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()
-- 
GitLab