fix: local pids not always converted to absolute URLs on topic actor controller

This commit is contained in:
Julian Lam
2025-09-15 13:53:27 -04:00
parent 8a120b76a8
commit f67942caec

View File

@@ -136,6 +136,7 @@ Actors.topic = async function (req, res, next) {
let collection; let collection;
let pids; let pids;
try { try {
// pids are used in generation of digest only.
([collection, pids] = await Promise.all([ ([collection, pids] = await Promise.all([
activitypub.helpers.generateCollection({ activitypub.helpers.generateCollection({
set: `tid:${req.params.tid}:posts`, set: `tid:${req.params.tid}:posts`,
@@ -151,7 +152,6 @@ Actors.topic = async function (req, res, next) {
} }
pids.push(mainPid); pids.push(mainPid);
pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid)); pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid));
collection.totalItems += 1; // account for mainPid
// Generate digest for ETag // Generate digest for ETag
const digest = activitypub.helpers.generateDigest(new Set(pids)); const digest = activitypub.helpers.generateDigest(new Set(pids));
@@ -168,15 +168,18 @@ Actors.topic = async function (req, res, next) {
} }
res.set('ETag', digest); res.set('ETag', digest);
// Convert pids to urls // Add OP to collection on first (or only) page
if (page || collection.totalItems < perPage) { if (page || collection.totalItems < perPage) {
collection.orderedItems = collection.orderedItems || []; collection.orderedItems = collection.orderedItems || [];
if (!page || page === 1) { // add OP to collection if (!page || page === 1) {
collection.orderedItems.unshift(mainPid); collection.orderedItems.unshift(mainPid);
collection.totalItems += 1;
} }
collection.orderedItems = collection.orderedItems.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid));
} }
// Convert pids to urls
collection.orderedItems = collection.orderedItems.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid));
const object = { const object = {
'@context': 'https://www.w3.org/ns/activitystreams', '@context': 'https://www.w3.org/ns/activitystreams',
id: `${nconf.get('url')}/topic/${req.params.tid}${collection.orderedItems && page ? `?page=${page}` : ''}`, id: `${nconf.get('url')}/topic/${req.params.tid}${collection.orderedItems && page ? `?page=${page}` : ''}`,