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 ...@@ -9,15 +9,18 @@ import { asyncMiddleware, localAccountValidator, localVideoChannelValidator } fr
import { VideoModel } from '../../models/video/video' import { VideoModel } from '../../models/video/video'
import { activityPubResponse } from './utils' import { activityPubResponse } from './utils'
import { MActorLight } from '@server/typings/models' import { MActorLight } from '@server/typings/models'
import { apPaginationValidator } from '../../middlewares/validators/activitypub'
const outboxRouter = express.Router() const outboxRouter = express.Router()
outboxRouter.get('/accounts/:name/outbox', outboxRouter.get('/accounts/:name/outbox',
apPaginationValidator,
localAccountValidator, localAccountValidator,
asyncMiddleware(outboxController) asyncMiddleware(outboxController)
) )
outboxRouter.get('/video-channels/:name/outbox', outboxRouter.get('/video-channels/:name/outbox',
apPaginationValidator,
localVideoChannelValidator, localVideoChannelValidator,
asyncMiddleware(outboxController) asyncMiddleware(outboxController)
) )
...@@ -38,7 +41,7 @@ async function outboxController (req: express.Request, res: express.Response) { ...@@ -38,7 +41,7 @@ async function outboxController (req: express.Request, res: express.Response) {
logger.info('Receiving outbox request for %s.', actorOutboxUrl) logger.info('Receiving outbox request for %s.', actorOutboxUrl)
const handler = (start: number, count: number) => buildActivities(actor, start, count) 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) return activityPubResponse(activityPubContextify(json), res)
} }
......
...@@ -100,7 +100,12 @@ function activityPubContextify <T> (data: T) { ...@@ -100,7 +100,12 @@ function activityPubContextify <T> (data: T) {
} }
type ActivityPubCollectionPaginationHandler = (start: number, count: number) => Bluebird<ResultList<any>> | Promise<ResultList<any>> 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)) { if (!page || !validator.isInt(page)) {
// We just display the first page URL, we only need the total items // We just display the first page URL, we only need the total items
const result = await handler(0, 1) const result = await handler(0, 1)
...@@ -113,7 +118,7 @@ async function activityPubCollectionPagination (baseUrl: string, handler: Activi ...@@ -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) const result = await handler(start, count)
let next: string | undefined let next: string | undefined
...@@ -123,7 +128,7 @@ async function activityPubCollectionPagination (baseUrl: string, handler: Activi ...@@ -123,7 +128,7 @@ async function activityPubCollectionPagination (baseUrl: string, handler: Activi
page = parseInt(page, 10) page = parseInt(page, 10)
// There are more results // There are more results
if (result.total > page * ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) { if (result.total > page * size) {
next = baseUrl + '?page=' + (page + 1) next = baseUrl + '?page=' + (page + 1)
} }
......
export * from './activity' export * from './activity'
export * from './signature' 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