This commit is contained in:
syuilo
2018-04-04 23:59:38 +09:00
parent 5bd1451b61
commit 77f056b4fc
9 changed files with 142 additions and 104 deletions

View File

@ -4,10 +4,10 @@ const createDOMPurify = require('dompurify');
import Resolver from '../resolver';
import DriveFile from '../../../models/drive-file';
import Post from '../../../models/post';
import uploadFromUrl from '../../../drive/upload-from-url';
import createPost from '../../../post/create';
import uploadFromUrl from '../../../api/drive/upload-from-url';
import createPost from '../../../api/post/create';
export default async (resolver: Resolver, actor, activity): Promise<void> => {
export default async (actor, activity): Promise<void> => {
if ('actor' in activity && actor.account.uri !== activity.actor) {
throw new Error('invalid actor');
}
@ -31,6 +31,8 @@ export default async (resolver: Resolver, actor, activity): Promise<void> => {
throw new Error(`already registered: ${uri}`);
}
const resolver = new Resolver();
const object = await resolver.resolve(activity);
switch (object.type) {

View File

@ -1,15 +1,9 @@
import { MongoError } from 'mongodb';
import parseAcct from '../../../acct/parse';
import Following, { IFollowing } from '../../../models/following';
import User from '../../../models/user';
import config from '../../../config';
import queue from '../../../queue';
import context from '../renderer/context';
import renderAccept from '../renderer/accept';
import request from '../../request';
import Resolver from '../resolver';
import follow from '../../../api/following/create';
export default async (resolver: Resolver, actor, activity, distribute) => {
export default async (actor, activity): Promise<void> => {
const prefix = config.url + '/@';
const id = activity.object.id || activity.object;
@ -27,52 +21,5 @@ export default async (resolver: Resolver, actor, activity, distribute) => {
throw new Error();
}
if (!distribute) {
const { _id } = await Following.findOne({
followerId: actor._id,
followeeId: followee._id
});
return {
resolver,
object: { $ref: 'following', $id: _id }
};
}
const promisedFollowing = Following.insert({
createdAt: new Date(),
followerId: actor._id,
followeeId: followee._id
}).then(following => new Promise((resolve, reject) => {
queue.create('http', {
type: 'follow',
following: following._id
}).save(error => {
if (error) {
reject(error);
} else {
resolve(following);
}
});
}) as Promise<IFollowing>, async error => {
// duplicate key error
if (error instanceof MongoError && error.code === 11000) {
return Following.findOne({
followerId: actor._id,
followeeId: followee._id
});
}
throw error;
});
const accept = renderAccept(activity);
accept['@context'] = context;
await request(followee, actor.account.inbox, accept);
return promisedFollowing.then(({ _id }) => ({
resolver,
object: { $ref: 'following', $id: _id }
}));
await follow(actor, followee, activity);
};