Skip to content

Commit 05c415b

Browse files
fix: thumbnails are not removed when a file is deleted automatically on user removal (RocketChat#38105)
1 parent e9a46d8 commit 05c415b

4 files changed

Lines changed: 21 additions & 8 deletions

File tree

.changeset/stupid-keys-double.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@rocket.chat/model-typings': patch
3+
'@rocket.chat/models': patch
4+
'@rocket.chat/meteor': patch
5+
---
6+
7+
Fixes user deletion not removing thumbnails of images sent by the deleted user

apps/meteor/app/lib/server/functions/deleteUser.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,17 @@ export async function deleteUser(userId: string, confirmRelinquish = false, dele
7373
const store = FileUpload.getStore('Uploads');
7474
const cursor = Messages.findFilesByUserId(userId);
7575

76-
for await (const { file } of cursor) {
77-
if (!file) {
78-
continue;
76+
for await (const { file, files } of cursor) {
77+
const fileIds = files?.map(({ _id }) => _id) || [];
78+
for await (const fileId of fileIds) {
79+
if (fileId) {
80+
await store.deleteById(fileId);
81+
}
82+
}
83+
84+
if (file?._id && !fileIds.includes(file._id)) {
85+
await store.deleteById(file._id);
7986
}
80-
await store.deleteById(file._id);
8187
}
8288

8389
await Messages.removeByUserId(userId);

packages/model-typings/src/models/IMessagesModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export interface IMessagesModel extends IBaseModel<IMessage> {
151151
findByMention(username: string, options?: FindOptions<IMessage>): FindCursor<IMessage>;
152152
findVisibleThreadByThreadId(tmid: string, options?: FindOptions<IMessage>): FindCursor<IMessage>;
153153

154-
findFilesByUserId(userId: string, options?: FindOptions<IMessage>): FindCursor<Pick<IMessage, 'file'>>;
154+
findFilesByUserId(userId: string, options?: FindOptions<IMessage>): FindCursor<Pick<IMessage, 'file' | 'files'>>;
155155
findVisibleByIds(ids: string[], options?: FindOptions<IMessage>): FindCursor<IMessage>;
156156
findVisibleByRoomIdNotContainingTypes(
157157
roomId: string,

packages/models/src/models/Messages.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -768,12 +768,12 @@ export class MessagesRaw extends BaseRaw<IMessage> implements IMessagesModel {
768768
return this.find(query, options);
769769
}
770770

771-
findFilesByUserId(userId: string, options: FindOptions<IMessage> = {}): FindCursor<Pick<IMessage, 'file'>> {
771+
findFilesByUserId(userId: string, options: FindOptions<IMessage> = {}): FindCursor<Pick<IMessage, 'file' | 'files'>> {
772772
const query = {
773773
'u._id': userId,
774-
'file._id': { $exists: true },
774+
'$or': [{ 'file._id': { $exists: true } }, { 'files._id': { $exists: true } }],
775775
};
776-
return this.find(query, { projection: { 'file._id': 1 }, ...options });
776+
return this.find(query, { projection: { 'file._id': 1, 'files._id': 1 }, ...options });
777777
}
778778

779779
findFilesByRoomIdPinnedTimestampAndUsers(

0 commit comments

Comments
 (0)