]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/activitypub/outbox.ts
Save
[github/Chocobozzz/PeerTube.git] / server / controllers / activitypub / outbox.ts
CommitLineData
e71bcc0f 1import * as express from 'express'
d52eb8f6 2import { Activity } from '../../../shared/models/activitypub/activity'
40ff5707
C
3import { activityPubCollectionPagination } from '../../helpers/activitypub'
4import { pageToStartAndCount } from '../../helpers/core-utils'
40ff5707 5import { ACTIVITY_PUB } from '../../initializers/constants'
e71bcc0f
C
6import { addActivityData } from '../../lib/activitypub/send/send-add'
7import { getAnnounceActivityPubUrl } from '../../lib/activitypub/url'
8import { announceActivityData } from '../../lib/index'
9import { asyncMiddleware, localAccountValidator } from '../../middlewares'
3fd3ab2d
C
10import { AccountModel } from '../../models/account/account'
11import { VideoModel } from '../../models/video/video'
e71bcc0f
C
12
13const outboxRouter = express.Router()
14
15outboxRouter.get('/account/:name/outbox',
16 localAccountValidator,
17 asyncMiddleware(outboxController)
18)
19
20// ---------------------------------------------------------------------------
21
22export {
23 outboxRouter
24}
25
26// ---------------------------------------------------------------------------
27
28async function outboxController (req: express.Request, res: express.Response, next: express.NextFunction) {
3fd3ab2d 29 const account: AccountModel = res.locals.account
e71bcc0f 30
c46edbc2 31 const page = req.query.page || 1
e71bcc0f
C
32 const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE)
33
3fd3ab2d 34 const data = await VideoModel.listAllAndSharedByAccountForOutbox(account.id, start, count)
e71bcc0f
C
35 const activities: Activity[] = []
36
e71bcc0f
C
37 for (const video of data.data) {
38 const videoObject = video.toActivityPubObject()
e71bcc0f
C
39
40 // This is a shared video
98ec8b8e 41 const videoChannel = video.VideoChannel
40ff5707 42 if (video.VideoShares !== undefined && video.VideoShares.length !== 0) {
fadf619a 43 const addActivity = await addActivityData(video.url, videoChannel.Account, video, videoChannel.Actor.url, videoObject, undefined)
40ff5707 44
e71bcc0f 45 const url = getAnnounceActivityPubUrl(video.url, account)
98ec8b8e 46 const announceActivity = await announceActivityData(url, account, addActivity, undefined)
40ff5707 47
e71bcc0f
C
48 activities.push(announceActivity)
49 } else {
fadf619a 50 const addActivity = await addActivityData(video.url, account, video, videoChannel.Actor.url, videoObject, undefined)
40ff5707 51
e71bcc0f
C
52 activities.push(addActivity)
53 }
54 }
55
56 const newResult = {
57 data: activities,
58 total: data.total
59 }
60 const json = activityPubCollectionPagination(account.url + '/outbox', page, newResult)
61
62 return res.json(json).end()
63}