From 0986301788a40663ced0aa9d6d8a97b099b622b1 Mon Sep 17 00:00:00 2001 From: mei23 Date: Tue, 14 Aug 2018 20:13:32 +0900 Subject: Implement ActivityPub Followers/Following/Outbox --- src/remote/activitypub/renderer/follow-user.ts | 16 ++++++++++++++ .../renderer/ordered-collection-page.ts | 23 ++++++++++++++++++++ .../activitypub/renderer/ordered-collection.ts | 25 ++++++++++++++++------ 3 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 src/remote/activitypub/renderer/follow-user.ts create mode 100644 src/remote/activitypub/renderer/ordered-collection-page.ts (limited to 'src/remote/activitypub') diff --git a/src/remote/activitypub/renderer/follow-user.ts b/src/remote/activitypub/renderer/follow-user.ts new file mode 100644 index 0000000000..9a488d392b --- /dev/null +++ b/src/remote/activitypub/renderer/follow-user.ts @@ -0,0 +1,16 @@ +import config from '../../../config'; +import * as mongo from 'mongodb'; +import User, { isLocalUser } from '../../../models/user'; + +/** + * Convert (local|remote)(Follower|Followee)ID to URL + * @param id Follower|Followee ID + */ +export default async function renderFollowUser(id: mongo.ObjectID): Promise { + + const user = await User.findOne({ + _id: id + }); + + return isLocalUser(user) ? `${config.url}/users/${user._id}` : user.uri; +} diff --git a/src/remote/activitypub/renderer/ordered-collection-page.ts b/src/remote/activitypub/renderer/ordered-collection-page.ts new file mode 100644 index 0000000000..83af07870e --- /dev/null +++ b/src/remote/activitypub/renderer/ordered-collection-page.ts @@ -0,0 +1,23 @@ +/** + * Render OrderedCollectionPage + * @param id URL of self + * @param totalItems Number of total items + * @param orderedItems Items + * @param partOf URL of base + * @param prev URL of prev page (optional) + * @param next URL of next page (optional) + */ +export default function(id: string, totalItems: any, orderedItems: any, partOf: string, prev: string, next: string) { + const page = { + id, + partOf, + type: 'OrderedCollectionPage', + totalItems, + orderedItems + } as any; + + if (prev) page.prev = prev; + if (next) page.next = next; + + return page; +} diff --git a/src/remote/activitypub/renderer/ordered-collection.ts b/src/remote/activitypub/renderer/ordered-collection.ts index 9d543b1e1b..3c448cf873 100644 --- a/src/remote/activitypub/renderer/ordered-collection.ts +++ b/src/remote/activitypub/renderer/ordered-collection.ts @@ -1,6 +1,19 @@ -export default (id: string, totalItems: any, orderedItems: any) => ({ - id, - type: 'OrderedCollection', - totalItems, - orderedItems -}); +/** + * Render OrderedCollection + * @param id URL of self + * @param totalItems Total number of items + * @param first URL of first page (optional) + * @param last URL of last page (optional) + */ +export default function(id: string, totalItems: any, first: string, last: string) { + const page: any = { + id, + type: 'OrderedCollection', + totalItems, + }; + + if (first) page.first = first; + if (last) page.last = last; + + return page; +} -- cgit v1.2.3-freya