fix: accept and undo logic saving improper id into database, updated follow logic so remote follow is not added to collection until an accept is received

This commit is contained in:
Julian Lam
2024-01-03 13:54:17 -05:00
parent ccbf32bcc5
commit 759d69e06c
2 changed files with 10 additions and 12 deletions

View File

@@ -48,9 +48,11 @@ inbox.isFollowed = async (actorId, uid) => {
};
inbox.accept = async (req) => {
const { actor, object } = req.body;
let { actor, object } = req.body;
const { type } = object;
actor = await activitypub.getActor(actor);
if (type === 'Follow') {
// todo: should check that actor and object.actor are the same person?
const uid = await helpers.resolveLocalUid(object.actor);
@@ -60,25 +62,27 @@ inbox.accept = async (req) => {
const now = Date.now();
await Promise.all([
db.sortedSetAdd(`followingRemote:${uid}`, now, actor.name),
db.sortedSetAdd(`followingRemote:${uid}`, now, actor.id),
db.incrObjectField(`user:${uid}`, 'followingRemoteCount'),
]);
}
};
inbox.undo = async (req) => {
const { actor, object } = req.body;
let { actor, object } = req.body;
const { type } = object;
actor = await activitypub.getActor(actor);
if (type === 'Follow') {
// todo: should check that actor and object.actor are the same person?
const uid = await helpers.resolveLocalUid(object.actor);
const uid = await helpers.resolveLocalUid(object.object);
if (!uid) {
throw new Error('[[error:invalid-uid]]');
}
await Promise.all([
db.sortedSetRemove(`followingRemote:${uid}`, actor.name),
db.sortedSetRemove(`followingRemote:${uid}`, actor.id),
db.decrObjectField(`user:${uid}`, 'followingRemoteCount'),
]);
}

View File

@@ -26,12 +26,6 @@ activitypubApi.follow = async (caller, { actorId } = {}) => {
type: 'Follow',
object: object.id,
});
const now = Date.now();
await Promise.all([
db.sortedSetAdd(`followingRemote:${caller.uid}`, now, actorId),
db.incrObjectField(`user:${caller.uid}`, 'followingRemoteCount'),
]);
};
activitypubApi.unfollow = async (caller, { actorId }) => {
@@ -51,7 +45,7 @@ activitypubApi.unfollow = async (caller, { actorId }) => {
});
await Promise.all([
db.sortedSetRemove(`followingRemote:${caller.uid}`, actorId),
db.sortedSetRemove(`followingRemote:${caller.uid}`, object.id),
db.decrObjectField(`user:${caller.uid}`, 'followingRemoteCount'),
]);
};