diff --git a/src/activitypub/actors.js b/src/activitypub/actors.js index e414ba5bd7..b9b1843a59 100644 --- a/src/activitypub/actors.js +++ b/src/activitypub/actors.js @@ -400,12 +400,21 @@ Actors.assertGroup = async (ids, options = {}) => { db.deleteObjectFields('handle:cid', queries.handleRemove), ]); + // Privilege mask + const masksAdd = categoryObjs.reduce((queries, category) => { + if (category?._activitypub?.postingRestrictedToMods) { + queries.push(db.setAdd.call(db, `cid:${category.cid}:privilegeMask`, 'topics:create')); + } + return queries; + }, []); + await Promise.all([ db.setObjectBulk(bulkSet), db.sortedSetAdd('usersRemote:lastCrawled', groups.map(() => now), groups.map(p => p.id)), db.sortedSetAddBulk(queries.searchAdd), db.setObject('handle:cid', queries.handleAdd), _migratePersonToGroup(categoryObjs), + Promise.all(masksAdd), ]); return categoryObjs; diff --git a/src/activitypub/mocks.js b/src/activitypub/mocks.js index 167be79263..dbebb55693 100644 --- a/src/activitypub/mocks.js +++ b/src/activitypub/mocks.js @@ -281,6 +281,7 @@ Mocks.category = async (actors) => { let { url, preferredUsername, icon, /* image, */ name, summary, followers, inbox, endpoints, tag, + postingRestrictedToMods, } = actor; preferredUsername = slugify(preferredUsername || name); /* @@ -338,6 +339,10 @@ Mocks.category = async (actors) => { inbox, sharedInbox: endpoints ? endpoints.sharedInbox : null, followersUrl: followers, + + _activitypub: { + postingRestrictedToMods, + }, }; return payload;