feat: check to/cc/audience for local category and put topic there instead (overrides passed-in cid)

closes #12634
This commit is contained in:
Julian Lam
2024-06-13 17:06:58 -04:00
parent d9f1fa3ad3
commit b6ffc47c5d

View File

@@ -48,7 +48,7 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => {
} }
const mainPost = chain[chain.length - 1]; const mainPost = chain[chain.length - 1];
let { pid: mainPid, tid, uid: authorId, timestamp, name, content } = mainPost; let { pid: mainPid, tid, uid: authorId, timestamp, name, content, _activitypub } = mainPost;
const hasTid = !!tid; const hasTid = !!tid;
// Update category if currently uncategorized // Update category if currently uncategorized
@@ -74,8 +74,19 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => {
if (hasTid) { if (hasTid) {
mainPid = await topics.getTopicField(tid, 'mainPid'); mainPid = await topics.getTopicField(tid, 'mainPid');
} else { } else {
// Check recipients/audience for local category
const set = activitypub.helpers.makeSet(_activitypub, ['to', 'cc', 'audience']);
const resolved = await Promise.all(Array.from(set).map(async id => await activitypub.helpers.resolveLocalId(id)));
const recipientCids = resolved
.filter(Boolean)
.filter(({ type }) => type === 'category')
.map(obj => obj.id);
if (recipientCids.length) {
cid = recipientCids.shift();
}
// mainPid ok to leave as-is // mainPid ok to leave as-is
cid = options.cid || -1; cid = cid || options.cid || -1;
title = name || activitypub.helpers.generateTitle(utils.decodeHTMLEntities(content)); title = name || activitypub.helpers.generateTitle(utils.decodeHTMLEntities(content));
} }
mainPid = utils.isNumber(mainPid) ? parseInt(mainPid, 10) : mainPid; mainPid = utils.isNumber(mainPid) ? parseInt(mainPid, 10) : mainPid;