From 78a9e86ca3dab66ddc2e68e11d84a80f3230155b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 27 Nov 2024 10:39:29 -0500 Subject: [PATCH] fix: #12939 convert custom emoji in actor summary into images --- src/activitypub/mocks.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/activitypub/mocks.js b/src/activitypub/mocks.js index e8dd50c345..41a60f24ad 100644 --- a/src/activitypub/mocks.js +++ b/src/activitypub/mocks.js @@ -19,6 +19,8 @@ const utils = require('../utils'); const accountHelpers = require('../controllers/accounts/helpers'); +const isEmojiShortcode = /^:[\w]+:$/; + const activitypub = module.parent.exports; const Mocks = module.exports; @@ -47,7 +49,7 @@ Mocks.profile = async (actors, hostMap) => { let hostname = hostMap.get(uid); let { url, preferredUsername, published, icon, image, - name, summary, followers, inbox, endpoints, + name, summary, followers, inbox, endpoints, tag, } = actor; preferredUsername = slugify(preferredUsername || name); const { followers: followerCount, following: followingCount } = await activitypub.actors.getLocalFollowCounts(uid); @@ -68,6 +70,17 @@ Mocks.profile = async (actors, hostMap) => { let bgColor = Array.prototype.reduce.call(preferredUsername, (cur, next) => cur + next.charCodeAt(), 0); bgColor = iconBackgrounds[bgColor % iconBackgrounds.length]; + // Replace emoji in summary + if (tag && Array.isArray(tag)) { + tag + .filter(tag => tag.type === 'Emoji' && + isEmojiShortcode.test(tag.name) && + tag.icon && tag.icon.mediaType && tag.icon.mediaType.startsWith('image/')) + .forEach((tag) => { + summary = summary.replace(new RegExp(tag.name, 'g'), ``); + }); + } + // Add custom fields into user hash const customFields = actor.attachment && Array.isArray(actor.attachment) && actor.attachment.length ? actor.attachment