summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/kernel
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2020-05-09 08:25:23 +0900
committerGitHub <noreply@github.com>2020-05-09 08:25:23 +0900
commitd6a8889d84f17f4e4530d4b5dcb555d1f3978b01 (patch)
tree0b6b7df2b85f2b287eff6f932321fcf130bb9904 /src/remote/activitypub/kernel
parentAPリファクタとLD-Signatureの検証に対応 (#6300) (diff)
downloadsharkey-d6a8889d84f17f4e4530d4b5dcb555d1f3978b01.tar.gz
sharkey-d6a8889d84f17f4e4530d4b5dcb555d1f3978b01.tar.bz2
sharkey-d6a8889d84f17f4e4530d4b5dcb555d1f3978b01.zip
Receive Flag (#6331)
Diffstat (limited to 'src/remote/activitypub/kernel')
-rw-r--r--src/remote/activitypub/kernel/flag/index.ts28
-rw-r--r--src/remote/activitypub/kernel/index.ts5
2 files changed, 32 insertions, 1 deletions
diff --git a/src/remote/activitypub/kernel/flag/index.ts b/src/remote/activitypub/kernel/flag/index.ts
new file mode 100644
index 0000000000..9b3065b112
--- /dev/null
+++ b/src/remote/activitypub/kernel/flag/index.ts
@@ -0,0 +1,28 @@
+import { IRemoteUser } from '../../../../models/entities/user';
+import config from '../../../../config';
+import { IFlag, getApIds } from '../../type';
+import { AbuseUserReports, Users } from '../../../../models';
+import { In } from 'typeorm';
+import { genId } from '../../../../misc/gen-id';
+
+export default async (actor: IRemoteUser, activity: IFlag): Promise<string> => {
+ // objectは `(User|Note) | (User|Note)[]` だけど、全パターンDBスキーマと対応させられないので
+ // 対象ユーザーは一番最初のユーザー として あとはコメントとして格納する
+ const uris = getApIds(activity.object);
+
+ const userIds = uris.filter(uri => uri.startsWith(config.url + '/users/')).map(uri => uri.split('/').pop());
+ const users = await Users.find({
+ id: In(userIds)
+ });
+ if (users.length < 1) return `skip`;
+
+ await AbuseUserReports.insert({
+ id: genId(),
+ createdAt: new Date(),
+ userId: users[0].id,
+ reporterId: actor.id,
+ comment: `${activity.content}\n${JSON.stringify(uris, null, 2)}`
+ });
+
+ return `ok`;
+};
diff --git a/src/remote/activitypub/kernel/index.ts b/src/remote/activitypub/kernel/index.ts
index 615edff88c..abf5a436c0 100644
--- a/src/remote/activitypub/kernel/index.ts
+++ b/src/remote/activitypub/kernel/index.ts
@@ -1,4 +1,4 @@
-import { IObject, isCreate, isDelete, isUpdate, isRead, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection } from '../type';
+import { IObject, isCreate, isDelete, isUpdate, isRead, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection, isFlag } from '../type';
import { IRemoteUser } from '../../../models/entities/user';
import create from './create';
import performDeleteActivity from './delete';
@@ -13,6 +13,7 @@ import reject from './reject';
import add from './add';
import remove from './remove';
import block from './block';
+import flag from './flag';
import { apLogger } from '../logger';
import Resolver from '../resolver';
import { toArray } from '../../../prelude/array';
@@ -62,6 +63,8 @@ async function performOneActivity(actor: IRemoteUser, activity: IObject): Promis
await undo(actor, activity);
} else if (isBlock(activity)) {
await block(actor, activity);
+ } else if (isFlag(activity)) {
+ await flag(actor, activity);
} else {
apLogger.warn(`unknown activity type: ${(activity as any).type}`);
}