1
0
forked from mirror/misskey

Resolve local Object ID

This commit is contained in:
Akihiko Odaki 2018-04-06 12:53:39 +09:00
parent 46e8fd44c1
commit 41acde0d8a

View File

@ -1,8 +1,10 @@
import { JSDOM } from 'jsdom'; import { JSDOM } from 'jsdom';
import { ObjectID } from 'mongodb'; import { ObjectID } from 'mongodb';
import parseAcct from '../../acct/parse';
import config from '../../config'; import config from '../../config';
import DriveFile from '../../models/drive-file'; import DriveFile from '../../models/drive-file';
import Post from '../../models/post'; import Post from '../../models/post';
import User from '../../models/user';
import { IRemoteUser } from '../../models/user'; import { IRemoteUser } from '../../models/user';
import uploadFromUrl from '../../drive/upload-from-url'; import uploadFromUrl from '../../drive/upload-from-url';
import createPost from '../../post/create'; import createPost from '../../post/create';
@ -133,6 +135,41 @@ class Creator {
return collection.object.map(async element => { return collection.object.map(async element => {
const uri = element.id || 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 { try {
await Promise.all([ await Promise.all([