summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-06 12:53:39 +0900
committerAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-06 12:55:48 +0900
commit41acde0d8a5fd59e4b0250d650eade3019947f2e (patch)
tree7d71f6876dda59e6b6fe6a61d6dcaf84dff4723e /src
parentMerge pull request #1403 from akihikodaki/duplicate (diff)
downloadsharkey-41acde0d8a5fd59e4b0250d650eade3019947f2e.tar.gz
sharkey-41acde0d8a5fd59e4b0250d650eade3019947f2e.tar.bz2
sharkey-41acde0d8a5fd59e4b0250d650eade3019947f2e.zip
Resolve local Object ID
Diffstat (limited to 'src')
-rw-r--r--src/remote/activitypub/create.ts37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/remote/activitypub/create.ts b/src/remote/activitypub/create.ts
index 3bc0c66f35..bbe595a454 100644
--- a/src/remote/activitypub/create.ts
+++ b/src/remote/activitypub/create.ts
@@ -1,8 +1,10 @@
import { JSDOM } from 'jsdom';
import { ObjectID } from 'mongodb';
+import parseAcct from '../../acct/parse';
import config from '../../config';
import DriveFile from '../../models/drive-file';
import Post from '../../models/post';
+import User from '../../models/user';
import { IRemoteUser } from '../../models/user';
import uploadFromUrl from '../../drive/upload-from-url';
import createPost from '../../post/create';
@@ -133,6 +135,41 @@ class Creator {
return collection.object.map(async element => {
const uri = element.id || element;
+ const localPrefix = config.url + '/@';
+
+ if (uri.startsWith(localPrefix)) {
+ const [acct, id] = uri.slice(localPrefix).split('/', 2);
+ const user = await User.aggregate([
+ {
+ $match: parseAcct(acct)
+ },
+ {
+ $lookup: {
+ from: 'posts',
+ localField: '_id',
+ foreignField: 'userId',
+ as: 'post'
+ }
+ },
+ {
+ $match: {
+ post: { _id: id }
+ }
+ }
+ ]);
+
+ if (user === null || user.posts.length <= 0) {
+ throw new Error();
+ }
+
+ return {
+ resolver: collection.resolver,
+ object: {
+ $ref: 'posts',
+ id
+ }
+ };
+ }
try {
await Promise.all([