diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-04-04 00:25:42 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-04 00:25:42 +0900 |
| commit | b4ebf4033f553d068cad494402aa675193d09fa3 (patch) | |
| tree | 8dfdd27810c5112d1bd26e3d65575d16e670ac28 /src/remote | |
| parent | Merge pull request #1387 from akihikodaki/duplicate (diff) | |
| parent | Implement Delete activity (diff) | |
| download | misskey-b4ebf4033f553d068cad494402aa675193d09fa3.tar.gz misskey-b4ebf4033f553d068cad494402aa675193d09fa3.tar.bz2 misskey-b4ebf4033f553d068cad494402aa675193d09fa3.zip | |
Merge pull request #1388 from akihikodaki/duplicate
Implement Delete activity
Diffstat (limited to 'src/remote')
| -rw-r--r-- | src/remote/activitypub/act/delete/index.ts | 24 | ||||
| -rw-r--r-- | src/remote/activitypub/act/delete/post.ts | 10 | ||||
| -rw-r--r-- | src/remote/activitypub/act/index.ts | 4 |
3 files changed, 38 insertions, 0 deletions
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); |