From 68a9aac9573969311dd00a44536c3ee4c05b883d Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Sat, 31 Mar 2018 19:55:00 +0900 Subject: Implement remote status retrieval --- src/common/remote/activitypub/act/create.ts | 9 +++++++++ src/common/remote/activitypub/act/index.ts | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/common/remote/activitypub/act/create.ts create mode 100644 src/common/remote/activitypub/act/index.ts (limited to 'src/common/remote/activitypub/act') diff --git a/src/common/remote/activitypub/act/create.ts b/src/common/remote/activitypub/act/create.ts new file mode 100644 index 0000000000..6c62f7ab9e --- /dev/null +++ b/src/common/remote/activitypub/act/create.ts @@ -0,0 +1,9 @@ +import create from '../create'; + +export default (resolver, actor, activity) => { + if ('actor' in activity && actor.account.uri !== activity.actor) { + throw new Error; + } + + return create(resolver, actor, activity.object); +}; diff --git a/src/common/remote/activitypub/act/index.ts b/src/common/remote/activitypub/act/index.ts new file mode 100644 index 0000000000..0f4084a61e --- /dev/null +++ b/src/common/remote/activitypub/act/index.ts @@ -0,0 +1,22 @@ +import create from './create'; +import createObject from '../create'; +import Resolver from '../resolver'; + +export default (actor, value) => { + return (new Resolver).resolve(value).then(resolved => Promise.all(resolved.map(async asyncResult => { + const { resolver, object } = await asyncResult; + const created = await (await createObject(resolver, actor, [object]))[0]; + + if (created !== null) { + return created; + } + + switch (object.type) { + case 'Create': + return create(resolver, actor, object); + + default: + return null; + } + }))); +} -- cgit v1.2.3-freya