diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2020-07-11 06:19:49 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-11 06:19:49 +0900 |
| commit | 5f8fb43cc9a2a3dc40b42fa63eee7cc0f9b17338 (patch) | |
| tree | 6e35b1de5b45fe711c50d6cd3aa7d72b6ee288ad /src/remote/activitypub/kernel/delete/index.ts | |
| parent | Update resolutions (#6516) (diff) | |
| download | sharkey-5f8fb43cc9a2a3dc40b42fa63eee7cc0f9b17338.tar.gz sharkey-5f8fb43cc9a2a3dc40b42fa63eee7cc0f9b17338.tar.bz2 sharkey-5f8fb43cc9a2a3dc40b42fa63eee7cc0f9b17338.zip | |
AP Delate Activityの修正 (#6512)
Diffstat (limited to 'src/remote/activitypub/kernel/delete/index.ts')
| -rw-r--r-- | src/remote/activitypub/kernel/delete/index.ts | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/src/remote/activitypub/kernel/delete/index.ts b/src/remote/activitypub/kernel/delete/index.ts index be7779e026..4fb3d40577 100644 --- a/src/remote/activitypub/kernel/delete/index.ts +++ b/src/remote/activitypub/kernel/delete/index.ts @@ -1,26 +1,48 @@ -import Resolver from '../../resolver'; import deleteNote from './note'; import { IRemoteUser } from '../../../../models/entities/user'; -import { IDelete, getApId, validPost } from '../../type'; -import { apLogger } from '../../logger'; +import { IDelete, getApId, isTombstone, IObject, validPost, validActor } from '../../type'; +import { toSingle } from '../../../../prelude/array'; /** * 削除アクティビティを捌きます */ -export default async (actor: IRemoteUser, activity: IDelete): Promise<void> => { +export default async (actor: IRemoteUser, activity: IDelete): Promise<string> => { if ('actor' in activity && actor.uri !== activity.actor) { throw new Error('invalid actor'); } - const resolver = new Resolver(); + // 削除対象objectのtype + let formarType: string | undefined; - const object = await resolver.resolve(activity.object); + if (typeof activity.object === 'string') { + // typeが不明だけど、どうせ消えてるのでremote resolveしない + formarType = undefined; + } else { + const object = activity.object as IObject; + if (isTombstone(object)) { + formarType = toSingle(object.formerType); + } else { + formarType = toSingle(object.type); + } + } + + const uri = getApId(activity.object); - const uri = getApId(object); + // type不明でもactorとobjectが同じならばそれはPersonに違いない + if (!formarType && actor.uri === uri) { + formarType = 'Person'; + } + + // それでもなかったらおそらくNote + if (!formarType) { + formarType = 'Note'; + } - if (validPost.includes(object.type) || object.type === 'Tombstone') { - deleteNote(actor, uri); + if (validPost.includes(formarType)) { + return await deleteNote(actor, uri); + } else if (validActor.includes(formarType)) { + return `Delete Actor is not implanted`; } else { - apLogger.warn(`Unknown type: ${object.type}`); + return `Unknown type ${formarType}`; } }; |