wip
This commit is contained in:
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
return null;
|
||||
async function deleteNote(note) {
|
||||
const post = await Post.findOneAndDelete({ uri: note.id });
|
||||
|
||||
createDb({
|
||||
type: 'deletePostDependents',
|
||||
id: post._id
|
||||
}).delay(65536).save();
|
||||
}
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
import deletePost from './post';
|
||||
|
||||
export default async ({ object }) => {
|
||||
switch (object.$ref) {
|
||||
case 'posts':
|
||||
return deletePost(object);
|
||||
}
|
||||
|
||||
return 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;
|
||||
};
|
@ -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';
|
||||
|
||||
|
Reference in New Issue
Block a user