Skip to content
Snippets Groups Projects
Commit cc3704c3 authored by Akihiko Odaki's avatar Akihiko Odaki
Browse files

Accept remote follow

parent 32c008d0
No related branches found
No related tags found
No related merge requests found
......@@ -4,11 +4,13 @@ import Following 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';
export default async (actor, activity) => {
const prefix = config.url + '/@';
const id = activity.object.id || activity.object;
let following;
if (!id.startsWith(prefix)) {
return null;
......@@ -24,28 +26,33 @@ export default async (actor, activity) => {
throw new Error();
}
try {
following = await Following.insert({
const accept = renderAccept(activity);
accept['@context'] = context;
await Promise.all([
request(followee, actor.account.inbox, accept),
Following.insert({
createdAt: new Date(),
followerId: actor._id,
followeeId: followee._id
});
} catch (exception) {
// duplicate key error
if (exception instanceof MongoError && exception.code === 11000) {
return null;
}
throw exception;
}
await new Promise((resolve, reject) => {
queue.create('http', { type: 'follow', following: following._id }).save(error => {
if (error) {
reject(error);
} else {
resolve(null);
}).then(following => new Promise((resolve, reject) => {
queue.create('http', { type: 'follow', following: following._id }).save(error => {
if (error) {
reject(error);
} else {
resolve();
}
});
}), error => {
// duplicate key error
if (error instanceof MongoError && error.code === 11000) {
return;
}
});
});
throw error;
})
]);
return null;
};
export default object => ({
type: 'Accept',
object
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment