Implement Delete activity
This commit is contained in:
24
src/remote/activitypub/act/delete/index.ts
Normal file
24
src/remote/activitypub/act/delete/index.ts
Normal file
@ -0,0 +1,24 @@
|
||||
import create from '../../create';
|
||||
import deletePost from './post';
|
||||
|
||||
export default async (resolver, actor, activity) => {
|
||||
if ('actor' in activity && actor.account.uri !== activity.actor) {
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
const results = await create(resolver, actor, activity.object);
|
||||
|
||||
await Promise.all(results.map(async promisedResult => {
|
||||
const result = await promisedResult;
|
||||
if (result === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (result.object.$ref) {
|
||||
case 'posts':
|
||||
await deletePost(result.object);
|
||||
}
|
||||
}));
|
||||
|
||||
return null;
|
||||
};
|
10
src/remote/activitypub/act/delete/post.ts
Normal file
10
src/remote/activitypub/act/delete/post.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import Post from '../../../../models/post';
|
||||
import queue from '../../../../queue';
|
||||
|
||||
export default ({ $id }) => Promise.all([
|
||||
Post.findOneAndDelete({ _id: $id }),
|
||||
new Promise((resolve, reject) => queue.create('db', {
|
||||
type: 'deletePostDependents',
|
||||
id: $id
|
||||
}).delay(65536).save(error => error ? reject(error) : resolve()))
|
||||
]);
|
@ -1,4 +1,5 @@
|
||||
import create from './create';
|
||||
import performDeleteActivity from './delete';
|
||||
import follow from './follow';
|
||||
import undo from './undo';
|
||||
import createObject from '../create';
|
||||
@ -19,6 +20,9 @@ export default async (parentResolver: Resolver, actor, value, distribute?: boole
|
||||
case 'Create':
|
||||
return create(resolver, actor, object, distribute);
|
||||
|
||||
case 'Delete':
|
||||
return performDeleteActivity(resolver, actor, object);
|
||||
|
||||
case 'Follow':
|
||||
return follow(resolver, actor, object, distribute);
|
||||
|
||||
|
Reference in New Issue
Block a user