From f33ded310751dd1b4bfd6fb792eec9adfde7019e Mon Sep 17 00:00:00 2001 From: nullobsi Date: Thu, 2 Dec 2021 18:14:44 -0800 Subject: feat: Undo Accept (#7980) * allow breaking of follow * send undo * delete by using reject follow --- .../src/remote/activitypub/kernel/undo/accept.ts | 27 ++++++++++++++++++++++ .../src/remote/activitypub/kernel/undo/index.ts | 4 +++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/remote/activitypub/kernel/undo/accept.ts (limited to 'packages/backend/src/remote') diff --git a/packages/backend/src/remote/activitypub/kernel/undo/accept.ts b/packages/backend/src/remote/activitypub/kernel/undo/accept.ts new file mode 100644 index 0000000000..5112d1d4ea --- /dev/null +++ b/packages/backend/src/remote/activitypub/kernel/undo/accept.ts @@ -0,0 +1,27 @@ +import unfollow from '@/services/following/delete'; +import cancelRequest from '@/services/following/requests/cancel'; +import {IAccept} from '../../type'; +import { IRemoteUser } from '@/models/entities/user'; +import { Followings } from '@/models/index'; +import DbResolver from '../../db-resolver'; + +export default async (actor: IRemoteUser, activity: IAccept): Promise => { + const dbResolver = new DbResolver(); + + const follower = await dbResolver.getUserFromApId(activity.object); + if (follower == null) { + return `skip: follower not found`; + } + + const following = await Followings.findOne({ + followerId: follower.id, + followeeId: actor.id + }); + + if (following) { + await unfollow(follower, actor); + return `ok: unfollowed`; + } + + return `skip: フォローされていない`; +}; diff --git a/packages/backend/src/remote/activitypub/kernel/undo/index.ts b/packages/backend/src/remote/activitypub/kernel/undo/index.ts index 14b1add152..8de78420e3 100644 --- a/packages/backend/src/remote/activitypub/kernel/undo/index.ts +++ b/packages/backend/src/remote/activitypub/kernel/undo/index.ts @@ -1,8 +1,9 @@ import { IRemoteUser } from '@/models/entities/user'; -import { IUndo, isFollow, isBlock, isLike, isAnnounce, getApType } from '../../type'; +import {IUndo, isFollow, isBlock, isLike, isAnnounce, getApType, isAccept} from '../../type'; import unfollow from './follow'; import unblock from './block'; import undoLike from './like'; +import undoAccept from './accept'; import { undoAnnounce } from './announce'; import Resolver from '../../resolver'; import { apLogger } from '../../logger'; @@ -29,6 +30,7 @@ export default async (actor: IRemoteUser, activity: IUndo): Promise => { if (isBlock(object)) return await unblock(actor, object); if (isLike(object)) return await undoLike(actor, object); if (isAnnounce(object)) return await undoAnnounce(actor, object); + if (isAccept(object)) return await undoAccept(actor, object); return `skip: unknown object type ${getApType(object)}`; }; -- cgit v1.2.3-freya