diff --git a/packages/rocketchat-api/server/v1/rooms.js b/packages/rocketchat-api/server/v1/rooms.js index ae1e1c85d04..2f05681c66f 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 f19e6c560b2..dc500d16ac1 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 00000000000..dafc3166ec8 --- /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); + } + }); + } + } +});