diff --git a/src/remote/activitypub/act/delete/index.ts b/src/remote/activitypub/act/delete/index.ts index 764814bac1..42272433de 100644 --- a/src/remote/activitypub/act/delete/index.ts +++ b/src/remote/activitypub/act/delete/index.ts @@ -1,18 +1,35 @@ import Resolver from '../../resolver'; import deleteNote from './note'; +import Post from '../../../../models/post'; +/** + * 削除アクティビティを捌きます + */ export default async (actor, activity): Promise => { if ('actor' in activity && actor.account.uri !== activity.actor) { - throw new Error(); + throw new Error('invalid actor'); } const resolver = new Resolver(); - const object = await resolver.resolve(activity); + const object = await resolver.resolve(activity.object); + + const uri = (object as any).id; switch (object.type) { case 'Note': - deleteNote(object); + deleteNote(uri); + break; + + case 'Tombstone': + const post = await Post.findOne({ uri }); + if (post != null) { + deleteNote(uri); + } + break; + + default: + console.warn(`Unknown type: ${object.type}`); break; } }; diff --git a/src/remote/activitypub/act/delete/note.ts b/src/remote/activitypub/act/delete/note.ts index 3b821f87c0..75534250e6 100644 --- a/src/remote/activitypub/act/delete/note.ts +++ b/src/remote/activitypub/act/delete/note.ts @@ -1,8 +1,14 @@ +import * as debug from 'debug'; + import Post from '../../../../models/post'; import { createDb } from '../../../../queue'; -export default async function(note) { - const post = await Post.findOneAndDelete({ uri: note.id }); +const log = debug('misskey:activitypub'); + +export default async function(uri: string) { + log(`Deleting the Note: ${uri}`); + + const post = await Post.findOneAndDelete({ uri }); createDb({ type: 'deletePostDependents',