From 22931be1ccffe4a8c977aae9224b3a38748835f9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 8 Oct 2024 16:28:42 -0400 Subject: [PATCH] fix: limited visibility remote posts with greater scope than asserted roomId should add those users to the chat room, #12834 --- src/activitypub/notes.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index cb1468b1be..92537c036f 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -225,9 +225,11 @@ Notes.assertPrivate = async (object) => { } // Compare room members with object recipients; if someone in-room is omitted, start new chat + const participants = await messaging.getUsersInRoom(roomId, 0, -1); + const participantUids = participants.map(user => user.uid); if (roomId) { - const participants = await messaging.getUsersInRoom(roomId, 0, -1); const omitted = participants.filter((user) => { + // todo: this could use recipientsResolved let { uid } = user; uid = utils.isNumber(uid) ? `${nconf.get('url')}/uid/${uid}` : uid; return !recipients.has(uid) && uid !== object.attributedTo; @@ -250,6 +252,13 @@ Notes.assertPrivate = async (object) => { timestamp = Date.now(); // otherwise message can't be seen in room as it pre-dates participants joining } + // Add any new members to the chat + const added = Array.from(recipientsResolved).filter(uid => !participantUids.includes(uid)); + const assertion = await activitypub.actors.assert(added); + if (assertion) { + await messaging.addUsersToRoom(object.attributedTo, added, roomId); + } + // Add message to room await messaging.sendMessage({ mid: object.id,