summaryrefslogtreecommitdiff
path: root/src/remote
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-04-04 00:25:42 +0900
committerGitHub <noreply@github.com>2018-04-04 00:25:42 +0900
commitb4ebf4033f553d068cad494402aa675193d09fa3 (patch)
tree8dfdd27810c5112d1bd26e3d65575d16e670ac28 /src/remote
parentMerge pull request #1387 from akihikodaki/duplicate (diff)
parentImplement Delete activity (diff)
downloadmisskey-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.ts24
-rw-r--r--src/remote/activitypub/act/delete/post.ts10
-rw-r--r--src/remote/activitypub/act/index.ts4
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);