diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2019-09-27 04:58:28 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2019-09-27 04:58:28 +0900 |
| commit | e14509574d534a74fcebf9515146b028bbdec153 (patch) | |
| tree | c49aa610bb703ce9b7903059235e69fec3eead11 /src/remote/activitypub/kernel | |
| parent | Use mk-frac (diff) | |
| download | sharkey-e14509574d534a74fcebf9515146b028bbdec153.tar.gz sharkey-e14509574d534a74fcebf9515146b028bbdec153.tar.bz2 sharkey-e14509574d534a74fcebf9515146b028bbdec153.zip | |
AP featured collectionの修正 / Collection Activityの対応 / typeの修正など (#5460)
* resolver type / fix updateFeatured
* type ApObject
* fix strange type
* AP Activity
* Collection Activityが失敗したらとりあえず無視
Diffstat (limited to 'src/remote/activitypub/kernel')
| -rw-r--r-- | src/remote/activitypub/kernel/announce/index.ts | 4 | ||||
| -rw-r--r-- | src/remote/activitypub/kernel/announce/note.ts | 4 | ||||
| -rw-r--r-- | src/remote/activitypub/kernel/block/index.ts | 7 | ||||
| -rw-r--r-- | src/remote/activitypub/kernel/create/note.ts | 4 | ||||
| -rw-r--r-- | src/remote/activitypub/kernel/index.ts | 83 |
5 files changed, 43 insertions, 59 deletions
diff --git a/src/remote/activitypub/kernel/announce/index.ts b/src/remote/activitypub/kernel/announce/index.ts index 68fce52e17..a9447840b7 100644 --- a/src/remote/activitypub/kernel/announce/index.ts +++ b/src/remote/activitypub/kernel/announce/index.ts @@ -1,7 +1,7 @@ import Resolver from '../../resolver'; import { IRemoteUser } from '../../../../models/entities/user'; import announceNote from './note'; -import { IAnnounce, INote, validPost, getApId } from '../../type'; +import { IAnnounce, validPost, getApId } from '../../type'; import { apLogger } from '../../logger'; const logger = apLogger; @@ -23,7 +23,7 @@ export default async (actor: IRemoteUser, activity: IAnnounce): Promise<void> => } if (validPost.includes(object.type)) { - announceNote(resolver, actor, activity, object as INote); + announceNote(resolver, actor, activity, object); } else { logger.warn(`Unknown announce type: ${object.type}`); } diff --git a/src/remote/activitypub/kernel/announce/note.ts b/src/remote/activitypub/kernel/announce/note.ts index f0594a57b7..a5db5b8ca7 100644 --- a/src/remote/activitypub/kernel/announce/note.ts +++ b/src/remote/activitypub/kernel/announce/note.ts @@ -1,7 +1,7 @@ import Resolver from '../../resolver'; import post from '../../../../services/note/create'; import { IRemoteUser, User } from '../../../../models/entities/user'; -import { IAnnounce, INote, getApId, getApIds } from '../../type'; +import { IAnnounce, IObject, getApId, getApIds } from '../../type'; import { fetchNote, resolveNote } from '../../models/note'; import { resolvePerson } from '../../models/person'; import { apLogger } from '../../logger'; @@ -14,7 +14,7 @@ const logger = apLogger; /** * アナウンスアクティビティを捌きます */ -export default async function(resolver: Resolver, actor: IRemoteUser, activity: IAnnounce, note: INote): Promise<void> { +export default async function(resolver: Resolver, actor: IRemoteUser, activity: IAnnounce, note: IObject): Promise<void> { const uri = getApId(activity); // アナウンサーが凍結されていたらスキップ diff --git a/src/remote/activitypub/kernel/block/index.ts b/src/remote/activitypub/kernel/block/index.ts index 5c247326cb..24bc9d524f 100644 --- a/src/remote/activitypub/kernel/block/index.ts +++ b/src/remote/activitypub/kernel/block/index.ts @@ -1,5 +1,5 @@ import config from '../../../../config'; -import { IBlock } from '../../type'; +import { IBlock, getApId } from '../../type'; import block from '../../../../services/blocking/create'; import { apLogger } from '../../logger'; import { Users } from '../../../../models'; @@ -8,10 +8,9 @@ import { IRemoteUser } from '../../../../models/entities/user'; const logger = apLogger; export default async (actor: IRemoteUser, activity: IBlock): Promise<void> => { - const id = typeof activity.object == 'string' ? activity.object : activity.object.id; - if (id == null) throw new Error('missing id'); + const id = getApId(activity.object); - const uri = activity.id || activity; + const uri = getApId(activity); logger.info(`Block: ${uri}`); diff --git a/src/remote/activitypub/kernel/create/note.ts b/src/remote/activitypub/kernel/create/note.ts index a28eaa11fb..6ccaa17ef5 100644 --- a/src/remote/activitypub/kernel/create/note.ts +++ b/src/remote/activitypub/kernel/create/note.ts @@ -1,13 +1,13 @@ import Resolver from '../../resolver'; import { IRemoteUser } from '../../../../models/entities/user'; import { createNote, fetchNote } from '../../models/note'; -import { getApId } from '../../type'; +import { getApId, IObject } from '../../type'; import { getApLock } from '../../../../misc/app-lock'; /** * 投稿作成アクティビティを捌きます */ -export default async function(resolver: Resolver, actor: IRemoteUser, note: any, silent = false): Promise<void> { +export default async function(resolver: Resolver, actor: IRemoteUser, note: IObject, silent = false): Promise<void> { const uri = getApId(note); const unlock = await getApLock(uri); 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'; -const self = async (actor: IRemoteUser, activity: Object): Promise<void> => { +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); + } +} + +async function performOneActivity(actor: IRemoteUser, activity: IObject): Promise<void> { 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; +} |