feat: handle Announce(Note) when Note is a piece of remote content

This commit is contained in:
Julian Lam
2024-02-07 00:14:29 -05:00
parent 9795abbf58
commit 94dcd29e63
2 changed files with 28 additions and 34 deletions

View File

@@ -1,6 +1,7 @@
'use strict';
const winston = require('winston');
const nconf = require('nconf');
const db = require('../database');
const user = require('../user');
@@ -75,35 +76,40 @@ inbox.announce = async (req) => {
// ok to fail
}
const { type, id } = await activitypub.helpers.resolveLocalId(object);
if (type !== 'post' || !(await posts.exists(id))) {
throw new Error('[[error:activitypub.invalid-id]]');
}
const assertion = await activitypub.actors.assert(actor);
if (!assertion) {
throw new Error('[[error:activitypub.invalid-id]]');
}
const tid = await posts.getPostField(id, 'tid');
if (String(object).startsWith(nconf.get('url'))) {
const { type, id } = await activitypub.helpers.resolveLocalId(object);
if (type !== 'post' || !(await posts.exists(id))) {
throw new Error('[[error:activitypub.invalid-id]]');
}
// No double-announce allowed
const existing = await topics.events.find(tid, {
type: 'announce',
uid: actor,
pid: id,
});
if (existing.length) {
await topics.events.purge(tid, existing);
const tid = await posts.getPostField(id, 'tid');
// No double-announce allowed
const existing = await topics.events.find(tid, {
type: 'announce',
uid: actor,
pid: id,
});
if (existing.length) {
await topics.events.purge(tid, existing);
}
await topics.events.log(tid, {
type: 'announce',
uid: actor,
href: `/post/${id}`,
pid: id,
timestamp,
});
} else {
const tid = await activitypub.notes.assertTopic(0, object);
await topics.updateLastPostTime(tid, timestamp);
}
await topics.events.log(tid, {
type: 'announce',
uid: actor,
href: `/post/${id}`,
pid: id,
timestamp,
});
};
inbox.follow = async (req) => {

View File

@@ -237,15 +237,3 @@ ActivityPub.send = async (type, id, targets, payload) => {
}
}));
};
setTimeout(async () => {
await ActivityPub.send('uid', 1, 'https://localhost/uid/1', {
// type: 'Undo',
// object: {
type: 'Announce',
actor: `https://localhost/uid/1`,
object: 'https://localhost/post/1',
published: new Date().toISOString(),
// },
});
}, 2000);