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/client.ts | 6 ++-- server/controllers/activitypub/index.ts | 2 ++ server/controllers/activitypub/outbox.ts | 60 ++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 server/controllers/activitypub/outbox.ts (limited to 'server/controllers/activitypub') diff --git a/server/controllers/activitypub/client.ts b/server/controllers/activitypub/client.ts index 7b3921770..24c8665a5 100644 --- a/server/controllers/activitypub/client.ts +++ b/server/controllers/activitypub/client.ts @@ -6,7 +6,7 @@ import { executeIfActivityPub, localAccountValidator } from '../../middlewares' import { pageToStartAndCount } from '../../helpers' import { AccountInstance, VideoChannelInstance } from '../../models' import { activityPubCollectionPagination } from '../../helpers/activitypub' -import { ACTIVITY_PUB } from '../../initializers/constants' +import { ACTIVITY_PUB, CONFIG } from '../../initializers/constants' import { asyncMiddleware } from '../../middlewares/async' import { videosGetValidator } from '../../middlewares/validators/videos' import { VideoInstance } from '../../models/video/video-interface' @@ -60,7 +60,7 @@ async function accountFollowersController (req: express.Request, res: express.Re const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) const result = await db.AccountFollow.listAcceptedFollowerUrlsForApi([ account.id ], start, count) - const activityPubResult = activityPubCollectionPagination(req.url, page, result) + const activityPubResult = activityPubCollectionPagination(CONFIG.WEBSERVER.URL + req.url, page, result) return res.json(activityPubResult) } @@ -72,7 +72,7 @@ async function accountFollowingController (req: express.Request, res: express.Re const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) const result = await db.AccountFollow.listAcceptedFollowingUrlsForApi([ account.id ], start, count) - const activityPubResult = activityPubCollectionPagination(req.url, page, result) + const activityPubResult = activityPubCollectionPagination(CONFIG.WEBSERVER.URL + req.url, page, result) return res.json(activityPubResult) } diff --git a/server/controllers/activitypub/index.ts b/server/controllers/activitypub/index.ts index c5bec6448..7e81902af 100644 --- a/server/controllers/activitypub/index.ts +++ b/server/controllers/activitypub/index.ts @@ -1,10 +1,12 @@ import * as express from 'express' import { activityPubClientRouter } from './client' import { inboxRouter } from './inbox' +import { outboxRouter } from './outbox' const activityPubRouter = express.Router() activityPubRouter.use('/', inboxRouter) +activityPubRouter.use('/', outboxRouter) activityPubRouter.use('/', activityPubClientRouter) // --------------------------------------------------------------------------- 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