Return an error on invalid count pagination
authorChocobozzz <me@florianbigard.com>
Thu, 9 Jan 2020 08:36:31 +0000 (09:36 +0100)
committerChocobozzz <me@florianbigard.com>
Thu, 9 Jan 2020 08:36:31 +0000 (09:36 +0100)
server/initializers/constants.ts
server/middlewares/pagination.ts
server/middlewares/validators/activitypub/pagination.ts
server/middlewares/validators/pagination.ts
shared/extra-utils/requests/check-api-params.ts

index f4a2b358b4f048e1da746ae44fa9c920509c104c..8461c732004e790f0e50fce3019fa559b95ec449 100644 (file)
@@ -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
+    }
   }
 }
 
index 043869303f72f0139de9dcbd377a83fbdc89e276..b59717d7bc46edf541f7418549df124201d842bd 100644 (file)
@@ -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()
 }
 
index 8b32d3415cc3f31a7ddde0351bea4086129567e6..fa21f063d47af1ba433b763c210577ba3d122f05 100644 (file)
@@ -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 })
index 80ae57c0bba7d790130cf7f31d406be29a2c92e1..1cae7848c400fe14f40392f5152c7e96a2097933 100644 (file)
@@ -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 })
index a2a549682aac9bd5f1646f8a69cfa85fc3475269..c34c7c216865b6b46f848d710886445e68c0d907 100644 (file)
@@ -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 = {}) {