Browse Source

Return an error on invalid count pagination

Chocobozzz 4 years ago
parent
commit
e0b56b7495

+ 10 - 3
server/initializers/constants.ts

@@ -22,9 +22,16 @@ const API_VERSION = 'v1'
 const PEERTUBE_VERSION = require(join(root(), 'package.json')).version
 
 const PAGINATION = {
-  COUNT: {
-    DEFAULT: 15,
-    MAX: 100
+  GLOBAL: {
+    COUNT: {
+      DEFAULT: 15,
+      MAX: 100
+    }
+  },
+  OUTBOX: {
+    COUNT: {
+      MAX: 50
+    }
   }
 }
 

+ 1 - 3
server/middlewares/pagination.ts

@@ -5,11 +5,9 @@ function setDefaultPagination (req: express.Request, res: express.Response, next
   if (!req.query.start) req.query.start = 0
   else req.query.start = parseInt(req.query.start, 10)
 
-  if (!req.query.count) req.query.count = PAGINATION.COUNT.DEFAULT
+  if (!req.query.count) req.query.count = PAGINATION.GLOBAL.COUNT.DEFAULT
   else req.query.count = parseInt(req.query.count, 10)
 
-  if (req.query.count > PAGINATION.COUNT.MAX) req.query.count = PAGINATION.COUNT.MAX
-
   return next()
 }
 

+ 7 - 2
server/middlewares/validators/activitypub/pagination.ts

@@ -2,10 +2,15 @@ import * as express from 'express'
 import { query } from 'express-validator'
 import { logger } from '../../../helpers/logger'
 import { areValidationErrors } from '../utils'
+import { PAGINATION } from '@server/initializers/constants'
 
 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)'),
+  query('page')
+    .optional()
+    .isInt({ min: 1 }).withMessage('Should have a valid page number'),
+  query('size')
+    .optional()
+    .isInt({ min: 0, max: PAGINATION.OUTBOX.COUNT.MAX }).withMessage(`Should have a valid page size (max: ${PAGINATION.OUTBOX.COUNT.MAX})`),
 
   (req: express.Request, res: express.Response, next: express.NextFunction) => {
     logger.debug('Checking pagination parameters', { parameters: req.query })

+ 7 - 2
server/middlewares/validators/pagination.ts

@@ -2,10 +2,15 @@ import * as express from 'express'
 import { query } from 'express-validator'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
+import { PAGINATION } from '@server/initializers/constants'
 
 const paginationValidator = [
-  query('start').optional().isInt({ min: 0 }).withMessage('Should have a number start'),
-  query('count').optional().isInt({ min: 0 }).withMessage('Should have a number count'),
+  query('start')
+    .optional()
+    .isInt({ min: 0 }).withMessage('Should have a number start'),
+  query('count')
+    .optional()
+    .isInt({ min: 0, max: PAGINATION.GLOBAL.COUNT.MAX }).withMessage(`Should have a number count (max: ${PAGINATION.GLOBAL.COUNT.MAX})`),
 
   (req: express.Request, res: express.Response, next: express.NextFunction) => {
     logger.debug('Checking pagination parameters', { parameters: req.query })

+ 10 - 2
shared/extra-utils/requests/check-api-params.ts

@@ -11,14 +11,22 @@ function checkBadStartPagination (url: string, path: string, token?: string, que
   })
 }
 
-function checkBadCountPagination (url: string, path: string, token?: string, query = {}) {
-  return makeGetRequest({
+async function checkBadCountPagination (url: string, path: string, token?: string, query = {}) {
+  await makeGetRequest({
     url,
     path,
     token,
     query: immutableAssign(query, { count: 'hello' }),
     statusCodeExpected: 400
   })
+
+  await makeGetRequest({
+    url,
+    path,
+    token,
+    query: immutableAssign(query, { count: 2000 }),
+    statusCodeExpected: 400
+  })
 }
 
 function checkBadSortPagination (url: string, path: string, token?: string, query = {}) {