summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/kernel
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2019-09-27 04:58:28 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2019-09-27 04:58:28 +0900
commite14509574d534a74fcebf9515146b028bbdec153 (patch)
treec49aa610bb703ce9b7903059235e69fec3eead11 /src/remote/activitypub/kernel
parentUse mk-frac (diff)
downloadsharkey-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.ts4
-rw-r--r--src/remote/activitypub/kernel/announce/note.ts4
-rw-r--r--src/remote/activitypub/kernel/block/index.ts7
-rw-r--r--src/remote/activitypub/kernel/create/note.ts4
-rw-r--r--src/remote/activitypub/kernel/index.ts83
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;
+}