From 783453897f04869c213dfa7aef7e8d33490ff47a Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Wed, 4 Apr 2018 19:51:41 +0900 Subject: Allow to undo Create activity --- src/remote/activitypub/act/delete.ts | 21 +++++++++++++++++++++ src/remote/activitypub/act/delete/index.ts | 24 ------------------------ src/remote/activitypub/act/delete/post.ts | 10 ---------- src/remote/activitypub/act/undo/index.ts | 5 ++++- 4 files changed, 25 insertions(+), 35 deletions(-) create mode 100644 src/remote/activitypub/act/delete.ts delete mode 100644 src/remote/activitypub/act/delete/index.ts delete mode 100644 src/remote/activitypub/act/delete/post.ts (limited to 'src/remote/activitypub/act') diff --git a/src/remote/activitypub/act/delete.ts b/src/remote/activitypub/act/delete.ts new file mode 100644 index 0000000000..f9eb4dd08d --- /dev/null +++ b/src/remote/activitypub/act/delete.ts @@ -0,0 +1,21 @@ +import create from '../create'; +import deleteObject from '../delete'; + +export default async (resolver, actor, activity) => { + if ('actor' in activity && actor.account.uri !== activity.actor) { + throw new Error(); + } + + const results = await create(resolver, actor, activity.object); + + await Promise.all(results.map(async promisedResult => { + const result = await promisedResult; + if (result === null) { + return; + } + + await deleteObject(result); + })); + + return null; +}; diff --git a/src/remote/activitypub/act/delete/index.ts b/src/remote/activitypub/act/delete/index.ts deleted file mode 100644 index eabf9a0436..0000000000 --- a/src/remote/activitypub/act/delete/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import create from '../../create'; -import deletePost from './post'; - -export default async (resolver, actor, activity) => { - if ('actor' in activity && actor.account.uri !== activity.actor) { - throw new Error(); - } - - const results = await create(resolver, actor, activity.object); - - await Promise.all(results.map(async promisedResult => { - const result = await promisedResult; - if (result === null) { - return; - } - - switch (result.object.$ref) { - case 'posts': - await deletePost(result.object); - } - })); - - return null; -}; diff --git a/src/remote/activitypub/act/delete/post.ts b/src/remote/activitypub/act/delete/post.ts deleted file mode 100644 index 1b748afe82..0000000000 --- a/src/remote/activitypub/act/delete/post.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Post from '../../../../models/post'; -import queue from '../../../../queue'; - -export default ({ $id }) => Promise.all([ - Post.findOneAndDelete({ _id: $id }), - new Promise((resolve, reject) => queue.create('db', { - type: 'deletePostDependents', - id: $id - }).delay(65536).save(error => error ? reject(error) : resolve())) -]); diff --git a/src/remote/activitypub/act/undo/index.ts b/src/remote/activitypub/act/undo/index.ts index 11c7ec0c83..aa60d3a4fa 100644 --- a/src/remote/activitypub/act/undo/index.ts +++ b/src/remote/activitypub/act/undo/index.ts @@ -1,4 +1,5 @@ import act from '../../act'; +import deleteObject from '../../delete'; import unfollow from './unfollow'; import Resolver from '../../resolver'; @@ -12,7 +13,7 @@ export default async (resolver: Resolver, actor, activity): Promise => { await Promise.all(results.map(async promisedResult => { const result = await promisedResult; - if (result === null) { + if (result === null || await deleteObject(result) !== null) { return; } @@ -21,4 +22,6 @@ export default async (resolver: Resolver, actor, activity): Promise => { await unfollow(result.object); } })); + + return null; }; -- cgit v1.2.3-freya