Skip to content
Snippets Groups Projects
Commit fbc77eb6 authored by Rigel Kent's avatar Rigel Kent Committed by Chocobozzz
Browse files

Add outbox page size parameter

parent c08579e1
No related branches found
No related tags found
No related merge requests found
......@@ -9,15 +9,18 @@ import { asyncMiddleware, localAccountValidator, localVideoChannelValidator } fr
import { VideoModel } from '../../models/video/video'
import { activityPubResponse } from './utils'
import { MActorLight } from '@server/typings/models'
import { apPaginationValidator } from '../../middlewares/validators/activitypub'
const outboxRouter = express.Router()
outboxRouter.get('/accounts/:name/outbox',
apPaginationValidator,
localAccountValidator,
asyncMiddleware(outboxController)
)
outboxRouter.get('/video-channels/:name/outbox',
apPaginationValidator,
localVideoChannelValidator,
asyncMiddleware(outboxController)
)
......@@ -38,7 +41,7 @@ async function outboxController (req: express.Request, res: express.Response) {
logger.info('Receiving outbox request for %s.', actorOutboxUrl)
const handler = (start: number, count: number) => buildActivities(actor, start, count)
const json = await activityPubCollectionPagination(actorOutboxUrl, handler, req.query.page)
const json = await activityPubCollectionPagination(actorOutboxUrl, handler, req.query.page, req.query.size)
return activityPubResponse(activityPubContextify(json), res)
}
......
......@@ -100,7 +100,12 @@ function activityPubContextify <T> (data: T) {
}
type ActivityPubCollectionPaginationHandler = (start: number, count: number) => Bluebird<ResultList<any>> | Promise<ResultList<any>>
async function activityPubCollectionPagination (baseUrl: string, handler: ActivityPubCollectionPaginationHandler, page?: any) {
async function activityPubCollectionPagination (
baseUrl: string,
handler: ActivityPubCollectionPaginationHandler,
page?: any,
size = ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE
) {
if (!page || !validator.isInt(page)) {
// We just display the first page URL, we only need the total items
const result = await handler(0, 1)
......@@ -113,7 +118,7 @@ async function activityPubCollectionPagination (baseUrl: string, handler: Activi
}
}
const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE)
const { start, count } = pageToStartAndCount(page, size)
const result = await handler(start, count)
let next: string | undefined
......@@ -123,7 +128,7 @@ async function activityPubCollectionPagination (baseUrl: string, handler: Activi
page = parseInt(page, 10)
// There are more results
if (result.total > page * ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) {
if (result.total > page * size) {
next = baseUrl + '?page=' + (page + 1)
}
......
export * from './activity'
export * from './signature'
export * from './pagination'
import * as express from 'express'
import { query } from 'express-validator'
import { logger } from '../../../helpers/logger'
import { areValidationErrors } from '../utils'
const apPaginationValidator = [
query('page').optional().isInt({ min: 1 }).withMessage('Should have a valid page number'),
query('size').optional().isInt({ max: 50 }).withMessage('Should have a valid page size (max: 50)'),
(req: express.Request, res: express.Response, next: express.NextFunction) => {
logger.debug('Checking pagination parameters', { parameters: req.query })
if (areValidationErrors(req, res)) return
return next()
}
]
// ---------------------------------------------------------------------------
export {
apPaginationValidator
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment