diff --git a/src/remote/activitypub/act/delete/index.ts b/src/remote/activitypub/act/delete/index.ts index 42272433d..8163ffc32 100644 --- a/src/remote/activitypub/act/delete/index.ts +++ b/src/remote/activitypub/act/delete/index.ts @@ -18,13 +18,13 @@ export default async (actor, activity): Promise => { switch (object.type) { case 'Note': - deleteNote(uri); + deleteNote(actor, uri); break; case 'Tombstone': const post = await Post.findOne({ uri }); if (post != null) { - deleteNote(uri); + deleteNote(actor, uri); } break; diff --git a/src/remote/activitypub/act/delete/note.ts b/src/remote/activitypub/act/delete/note.ts index 75534250e..5306b705e 100644 --- a/src/remote/activitypub/act/delete/note.ts +++ b/src/remote/activitypub/act/delete/note.ts @@ -5,10 +5,20 @@ import { createDb } from '../../../../queue'; const log = debug('misskey:activitypub'); -export default async function(uri: string) { +export default async function(actor, uri: string) { log(`Deleting the Note: ${uri}`); - const post = await Post.findOneAndDelete({ uri }); + const post = await Post.findOne({ uri }); + + if (post == null) { + throw new Error('post not found'); + } + + if (post.userId !== actor._id) { + throw new Error('投稿を削除しようとしているユーザーは投稿の作成者ではありません'); + } + + Post.remove({ _id: post._id }); createDb({ type: 'deletePostDependents',