diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2020-05-09 08:25:23 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-09 08:25:23 +0900 |
| commit | d6a8889d84f17f4e4530d4b5dcb555d1f3978b01 (patch) | |
| tree | 0b6b7df2b85f2b287eff6f932321fcf130bb9904 /src/remote/activitypub/kernel | |
| parent | APリファクタとLD-Signatureの検証に対応 (#6300) (diff) | |
| download | sharkey-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.ts | 28 | ||||
| -rw-r--r-- | src/remote/activitypub/kernel/index.ts | 5 |
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}`); } |