summaryrefslogtreecommitdiff
path: root/src/remote
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-05 03:21:11 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-05 03:21:11 +0900
commitc2c03a1c650c0395fc4d77334ec86d00b1bb24c2 (patch)
tree12a55d4b30ede3892a0bd747dfe386307e7eeb77 /src/remote
parentwip (diff)
downloadmisskey-c2c03a1c650c0395fc4d77334ec86d00b1bb24c2.tar.gz
misskey-c2c03a1c650c0395fc4d77334ec86d00b1bb24c2.tar.bz2
misskey-c2c03a1c650c0395fc4d77334ec86d00b1bb24c2.zip
wip
Diffstat (limited to 'src/remote')
-rw-r--r--src/remote/activitypub/act/create.ts25
-rw-r--r--src/remote/activitypub/act/delete.ts31
-rw-r--r--src/remote/activitypub/act/undo.ts2
-rw-r--r--src/remote/activitypub/delete/index.ts10
-rw-r--r--src/remote/activitypub/delete/post.ts13
-rw-r--r--src/remote/activitypub/resolve-person.ts1
6 files changed, 37 insertions, 45 deletions
diff --git a/src/remote/activitypub/act/create.ts b/src/remote/activitypub/act/create.ts
index c486571fc1..f97832a989 100644
--- a/src/remote/activitypub/act/create.ts
+++ b/src/remote/activitypub/act/create.ts
@@ -36,17 +36,17 @@ export default async (actor, activity): Promise<void> => {
switch (object.type) {
case 'Image':
- createImage(resolver, object);
+ createImage(object);
break;
case 'Note':
- createNote(resolver, object);
+ createNote(object);
break;
}
///
- async function createImage(resolver: Resolver, image) {
+ async function createImage(image) {
if ('attributedTo' in image && actor.account.uri !== image.attributedTo) {
throw new Error('invalid image');
}
@@ -54,7 +54,7 @@ export default async (actor, activity): Promise<void> => {
return await uploadFromUrl(image.url, actor);
}
- async function createNote(resolver: Resolver, note) {
+ async function createNote(note) {
if (
('attributedTo' in note && actor.account.uri !== note.attributedTo) ||
typeof note.id !== 'string'
@@ -63,20 +63,29 @@ export default async (actor, activity): Promise<void> => {
}
const media = [];
-
if ('attachment' in note) {
note.attachment.forEach(async media => {
- const created = await createImage(resolver, media);
+ const created = await createImage(media);
media.push(created);
});
}
+ let reply = null;
+ if ('inReplyTo' in note) {
+ const inReplyToPost = await Post.findOne({ uri: note.id || note });
+ if (inReplyToPost) {
+ reply = inReplyToPost;
+ } else {
+ reply = await createNote(await resolver.resolve(note));
+ }
+ }
+
const { window } = new JSDOM(note.content);
- await createPost(actor, {
+ return await createPost(actor, {
createdAt: new Date(note.published),
media,
- reply: undefined,
+ reply,
repost: undefined,
text: window.document.body.textContent,
viaMobile: false,
diff --git a/src/remote/activitypub/act/delete.ts b/src/remote/activitypub/act/delete.ts
index f9eb4dd08d..334ca47edf 100644
--- a/src/remote/activitypub/act/delete.ts
+++ b/src/remote/activitypub/act/delete.ts
@@ -1,21 +1,28 @@
-import create from '../create';
-import deleteObject from '../delete';
+import Resolver from '../resolver';
+import Post from '../../../models/post';
+import { createDb } from '../../../queue';
-export default async (resolver, actor, activity) => {
+export default async (actor, activity): Promise<void> => {
if ('actor' in activity && actor.account.uri !== activity.actor) {
throw new Error();
}
- const results = await create(resolver, actor, activity.object);
+ const resolver = new Resolver();
- await Promise.all(results.map(async promisedResult => {
- const result = await promisedResult;
- if (result === null) {
- return;
- }
+ const object = await resolver.resolve(activity);
- await deleteObject(result);
- }));
+ switch (object.type) {
+ case 'Note':
+ deleteNote(object);
+ break;
+ }
+
+ async function deleteNote(note) {
+ const post = await Post.findOneAndDelete({ uri: note.id });
- return null;
+ createDb({
+ type: 'deletePostDependents',
+ id: post._id
+ }).delay(65536).save();
+ }
};
diff --git a/src/remote/activitypub/act/undo.ts b/src/remote/activitypub/act/undo.ts
index b3b83777d1..9d9f6b0359 100644
--- a/src/remote/activitypub/act/undo.ts
+++ b/src/remote/activitypub/act/undo.ts
@@ -7,7 +7,7 @@ export default async (actor, activity): Promise<void> => {
switch (activity.object.type) {
case 'Follow':
- unfollow(activity.object);
+ unfollow(actor, activity.object);
break;
}
diff --git a/src/remote/activitypub/delete/index.ts b/src/remote/activitypub/delete/index.ts
deleted file mode 100644
index bc9104284b..0000000000
--- a/src/remote/activitypub/delete/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import deletePost from './post';
-
-export default async ({ object }) => {
- switch (object.$ref) {
- case 'posts':
- return deletePost(object);
- }
-
- return null;
-};
diff --git a/src/remote/activitypub/delete/post.ts b/src/remote/activitypub/delete/post.ts
deleted file mode 100644
index f6c816647d..0000000000
--- a/src/remote/activitypub/delete/post.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import Post from '../../../models/post';
-import queue from '../../../queue';
-
-export default async ({ $id }) => {
- const promisedDeletion = Post.findOneAndDelete({ _id: $id });
-
- await new Promise((resolve, reject) => queue.create('db', {
- type: 'deletePostDependents',
- id: $id
- }).delay(65536).save(error => error ? reject(error) : resolve()));
-
- return promisedDeletion;
-};
diff --git a/src/remote/activitypub/resolve-person.ts b/src/remote/activitypub/resolve-person.ts
index 77d08398be..28162497f3 100644
--- a/src/remote/activitypub/resolve-person.ts
+++ b/src/remote/activitypub/resolve-person.ts
@@ -2,7 +2,6 @@ import { JSDOM } from 'jsdom';
import { toUnicode } from 'punycode';
import User, { validateUsername, isValidName, isValidDescription } from '../../models/user';
import webFinger from '../webfinger';
-import create from './create';
import Resolver from './resolver';
import uploadFromUrl from '../../api/drive/upload-from-url';