From bc548e7fc5601b93aebc93da9f455298c95bb755 Mon Sep 17 00:00:00 2001 From: "Pierre H. Lehnen" Date: Fri, 20 Apr 2018 18:17:23 -0300 Subject: [PATCH] [FIX] Missing user data on files uploaded through the API (#10473) * Added missing userId * Fixed roomFiles method to return files without users too * Added migration to add userId on orphan files * Changed migration code to make sure the message exist before trying to use it's data --- packages/rocketchat-api/server/v1/rooms.js | 3 ++- server/publications/roomFiles.js | 4 +-- server/startup/migrations/v113.js | 31 ++++++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 server/startup/migrations/v113.js diff --git a/packages/rocketchat-api/server/v1/rooms.js b/packages/rocketchat-api/server/v1/rooms.js index ae1e1c85d043..2f05681c66ff 100644 --- a/packages/rocketchat-api/server/v1/rooms.js +++ b/packages/rocketchat-api/server/v1/rooms.js @@ -99,7 +99,8 @@ RocketChat.API.v1.addRoute('rooms.upload/:rid', { authRequired: true }, { name: file.filename, size: file.fileBuffer.length, type: file.mimetype, - rid: this.urlParams.rid + rid: this.urlParams.rid, + userId: this.userId }; Meteor.runAsUser(this.userId, () => { diff --git a/server/publications/roomFiles.js b/server/publications/roomFiles.js index f19e6c560b24..dc500d16ac1d 100644 --- a/server/publications/roomFiles.js +++ b/server/publications/roomFiles.js @@ -7,11 +7,11 @@ Meteor.publish('roomFiles', function(rid, limit = 50) { const cursorFileListHandle = RocketChat.models.Uploads.findNotHiddenFilesOfRoom(rid, limit).observeChanges({ added(_id, record) { - const {username, name} = RocketChat.models.Users.findOneById(record.userId); + const {username, name} = record.userId ? RocketChat.models.Users.findOneById(record.userId) : {}; return pub.added('room_files', _id, {...record, user:{username, name}}); }, changed(_id, record) { - const {username, name} = RocketChat.models.Users.findOneById(record.userId); + const {username, name} = record.userId ? RocketChat.models.Users.findOneById(record.userId) : {}; return pub.changed('room_files', _id, {...record, user:{username, name}}); }, removed(_id, record) { diff --git a/server/startup/migrations/v113.js b/server/startup/migrations/v113.js new file mode 100644 index 000000000000..dafc3166ec8e --- /dev/null +++ b/server/startup/migrations/v113.js @@ -0,0 +1,31 @@ +RocketChat.Migrations.add({ + version: 113, + up() { + if (RocketChat && RocketChat.models && RocketChat.models.Uploads && RocketChat.models.Messages) { + const fileQuery = { + userId: null + }; + + const filesToUpdate = RocketChat.models.Uploads.find(fileQuery); + filesToUpdate.forEach((file) => { + const messageQuery = { + 'file._id' : file._id + }; + const message = RocketChat.models.Messages.findOne(messageQuery); + if (message) { + const filter = { + _id: file._id + }; + + const update = { + $set: { + userId: message.u._id + } + }; + + RocketChat.models.Uploads.model.direct.update(filter, update); + } + }); + } + } +});