From 210cb57aa5d1c832708f0015ab1f23f70474beb5 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Tue, 3 Apr 2018 17:50:52 +0900 Subject: Implement Delete activity --- src/remote/activitypub/act/delete/index.ts | 24 ++++++++++++++++++++++++ src/remote/activitypub/act/delete/post.ts | 10 ++++++++++ src/remote/activitypub/act/index.ts | 4 ++++ 3 files changed, 38 insertions(+) create mode 100644 src/remote/activitypub/act/delete/index.ts create mode 100644 src/remote/activitypub/act/delete/post.ts (limited to 'src/remote') diff --git a/src/remote/activitypub/act/delete/index.ts b/src/remote/activitypub/act/delete/index.ts new file mode 100644 index 0000000000..eabf9a0436 --- /dev/null +++ b/src/remote/activitypub/act/delete/index.ts @@ -0,0 +1,24 @@ +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 new file mode 100644 index 0000000000..1b748afe82 --- /dev/null +++ b/src/remote/activitypub/act/delete/post.ts @@ -0,0 +1,10 @@ +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/index.ts b/src/remote/activitypub/act/index.ts index 030f1cf25b..d282e12885 100644 --- a/src/remote/activitypub/act/index.ts +++ b/src/remote/activitypub/act/index.ts @@ -1,4 +1,5 @@ import create from './create'; +import performDeleteActivity from './delete'; import follow from './follow'; import undo from './undo'; import createObject from '../create'; @@ -19,6 +20,9 @@ export default async (parentResolver: Resolver, actor, value, distribute?: boole case 'Create': return create(resolver, actor, object, distribute); + case 'Delete': + return performDeleteActivity(resolver, actor, object); + case 'Follow': return follow(resolver, actor, object, distribute); -- cgit v1.2.3-freya