fix: #13076, allow pulling in of topics by their topic URL

fix: reapply fixes that were part of since-reverted 4fd7a9dc59
This commit is contained in:
Julian Lam
2025-01-29 14:48:36 -05:00
parent 126ff28612
commit c6e6ab438b
2 changed files with 14 additions and 5 deletions

View File

@@ -27,11 +27,16 @@ Contexts.get = async (uid, id) => {
}
try {
({ context } = await activitypub.get('uid', uid, id, { headers }));
if (!context) {
({ id, type, context } = await activitypub.get('uid', uid, id, { headers }));
if (acceptableTypes.includes(type)) { // is context
activitypub.helpers.log(`[activitypub/context] ${id} is the context.`);
return { context: id };
} else if (!context) {
activitypub.helpers.log(`[activitypub/context] ${id} contains no context.`);
return false;
}
// context provided; try to resolve it.
({ type } = await activitypub.get('uid', uid, context));
} catch (e) {
if (e.code === 'ap_get_304') {
@@ -98,9 +103,13 @@ Contexts.getItems = async (uid, id, options) => {
const inputId = activitypub.helpers.isUri(options.input) ? options.input : options.input.id;
const inCollection = Array.from(chain).map(p => p.pid).includes(inputId);
if (!inCollection) {
chain.add(activitypub.helpers.isUri(options.input) ?
const item = activitypub.helpers.isUri(options.input) ?
await parseString(uid, options.input) :
await parseItem(uid, options.input));
await parseItem(uid, options.input);
if (item) {
chain.add(item);
}
}
return chain;

View File

@@ -42,11 +42,11 @@ module.exports = function (app, middleware, controllers) {
app.get('/topic/:tid/:slug?', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topic);
app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category);
app.get('/category/:cid/inbox', [...middlewares, middleware.assert.category], controllers.activitypub.getInbox);
app.post('/category/:cid/inbox', [...inboxMiddlewares, middleware.assert.category, ...inboxMiddlewares], controllers.activitypub.postInbox);
app.get('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.getCategoryOutbox);
app.post('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.postOutbox);
app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category);
app.get('/message/:mid', [...middlewares, middleware.assert.message], controllers.activitypub.actors.message);
};