From e14509574d534a74fcebf9515146b028bbdec153 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Fri, 27 Sep 2019 04:58:28 +0900 Subject: AP featured collectionの修正 / Collection Activityの対応 / typeの修正など (#5460) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * resolver type / fix updateFeatured * type ApObject * fix strange type * AP Activity * Collection Activityが失敗したらとりあえず無視 --- src/remote/activitypub/kernel/index.ts | 83 ++++++++++++++-------------------- 1 file changed, 34 insertions(+), 49 deletions(-) (limited to 'src/remote/activitypub/kernel/index.ts') diff --git a/src/remote/activitypub/kernel/index.ts b/src/remote/activitypub/kernel/index.ts index a0646bdd67..c8298dc797 100644 --- a/src/remote/activitypub/kernel/index.ts +++ b/src/remote/activitypub/kernel/index.ts @@ -1,4 +1,4 @@ -import { Object } from '../type'; +import { IObject, isCreate, isDelete, isUpdate, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection } from '../type'; import { IRemoteUser } from '../../../models/entities/user'; import create from './create'; import performDeleteActivity from './delete'; @@ -13,68 +13,53 @@ import add from './add'; import remove from './remove'; import block from './block'; import { apLogger } from '../logger'; +import Resolver from '../resolver'; +import { toArray } from '../../../prelude/array'; + +export async function performActivity(actor: IRemoteUser, activity: IObject) { + if (isCollectionOrOrderedCollection(activity)) { + const resolver = new Resolver(); + for (const item of toArray(isCollection(activity) ? activity.items : activity.orderedItems)) { + const act = await resolver.resolve(item); + try { + await performOneActivity(actor, act); + } catch (e) { + apLogger.error(e); + } + } + } else { + await performOneActivity(actor, activity); + } +} -const self = async (actor: IRemoteUser, activity: Object): Promise => { +async function performOneActivity(actor: IRemoteUser, activity: IObject): Promise { if (actor.isSuspended) return; - switch (activity.type) { - case 'Create': + if (isCreate(activity)) { await create(actor, activity); - break; - - case 'Delete': + } else if (isDelete(activity)) { await performDeleteActivity(actor, activity); - break; - - case 'Update': + } else if (isUpdate(activity)) { await performUpdateActivity(actor, activity); - break; - - case 'Follow': + } else if (isFollow(activity)) { await follow(actor, activity); - break; - - case 'Accept': + } else if (isAccept(activity)) { await accept(actor, activity); - break; - - case 'Reject': + } else if (isReject(activity)) { await reject(actor, activity); - break; - - case 'Add': + } else if (isAdd(activity)) { await add(actor, activity).catch(err => apLogger.error(err)); - break; - - case 'Remove': + } else if (isRemove(activity)) { await remove(actor, activity).catch(err => apLogger.error(err)); - break; - - case 'Announce': + } else if (isAnnounce(activity)) { await announce(actor, activity); - break; - - case 'Like': + } else if (isLike(activity)) { await like(actor, activity); - break; - - case 'Undo': + } else if (isUndo(activity)) { await undo(actor, activity); - break; - - case 'Block': + } else if (isBlock(activity)) { await block(actor, activity); - break; - - case 'Collection': - case 'OrderedCollection': - // TODO - break; - - default: + } else { apLogger.warn(`unknown activity type: ${(activity as any).type}`); - return; } -}; - -export default self; +} -- cgit v1.2.3-freya