Skip to content

Commit

Permalink
[FIX] Missing user data on files uploaded through the API (#10473)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Hudell authored and rodrigok committed Apr 20, 2018
1 parent 6f2702d commit bc548e7
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 3 deletions.
3 changes: 2 additions & 1 deletion packages/rocketchat-api/server/v1/rooms.js
Original file line number Diff line number Diff line change
Expand Up @@ -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, () => {
Expand Down
4 changes: 2 additions & 2 deletions server/publications/roomFiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
31 changes: 31 additions & 0 deletions server/startup/migrations/v113.js
Original file line number Diff line number Diff line change
@@ -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);
}
});
}
}
});

0 comments on commit bc548e7

Please sign in to comment.