From e71bcc0f4b31ecfd84a786411febfc6d18a85258 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 21 Nov 2017 18:23:10 +0100 Subject: Add outbox --- server/controllers/activitypub/outbox.ts | 60 ++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 server/controllers/activitypub/outbox.ts (limited to 'server/controllers/activitypub/outbox.ts') diff --git a/server/controllers/activitypub/outbox.ts b/server/controllers/activitypub/outbox.ts new file mode 100644 index 000000000..396fa2db5 --- /dev/null +++ b/server/controllers/activitypub/outbox.ts @@ -0,0 +1,60 @@ +import * as express from 'express' +import { Activity, ActivityAdd } from '../../../shared/models/activitypub/activity' +import { activityPubCollectionPagination, activityPubContextify } from '../../helpers/activitypub' +import { database as db } from '../../initializers' +import { addActivityData } from '../../lib/activitypub/send/send-add' +import { getAnnounceActivityPubUrl } from '../../lib/activitypub/url' +import { announceActivityData } from '../../lib/index' +import { asyncMiddleware, localAccountValidator } from '../../middlewares' +import { AccountInstance } from '../../models/account/account-interface' +import { pageToStartAndCount } from '../../helpers/core-utils' +import { ACTIVITY_PUB } from '../../initializers/constants' + +const outboxRouter = express.Router() + +outboxRouter.get('/account/:name/outbox', + localAccountValidator, + asyncMiddleware(outboxController) +) + +// --------------------------------------------------------------------------- + +export { + outboxRouter +} + +// --------------------------------------------------------------------------- + +async function outboxController (req: express.Request, res: express.Response, next: express.NextFunction) { + const account: AccountInstance = res.locals.account + + const page = req.params.page || 1 + const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) + + const data = await db.Video.listAllAndSharedByAccountForOutbox(account.id, start, count) + const activities: Activity[] = [] + + console.log(account.url) + + for (const video of data.data) { + const videoObject = video.toActivityPubObject() + let addActivity: ActivityAdd = await addActivityData(video.url, account, video, video.VideoChannel.url, videoObject) + + // This is a shared video + if (video.VideoShare !== undefined) { + const url = getAnnounceActivityPubUrl(video.url, account) + const announceActivity = await announceActivityData(url, account, addActivity) + activities.push(announceActivity) + } else { + activities.push(addActivity) + } + } + + const newResult = { + data: activities, + total: data.total + } + const json = activityPubCollectionPagination(account.url + '/outbox', page, newResult) + + return res.json(json).end() +} -- cgit v1.2.3