X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmiddlewares%2Fvalidators%2Fshared%2Futils.ts;h=f39128fddd8da8e6c240136991aa32e591b11ee5;hb=8ca52bcc2c37d457e8b19a237c66b8dd1c00b6b9;hp=d3e4870a92eba9dc1dc912291151a1a69db48b47;hpb=10363c74c1d869f0e0c7bc4d0367b1f34d1bb6a4;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/middlewares/validators/shared/utils.ts b/server/middlewares/validators/shared/utils.ts index d3e4870a9..f39128fdd 100644 --- a/server/middlewares/validators/shared/utils.ts +++ b/server/middlewares/validators/shared/utils.ts @@ -1,12 +1,39 @@ -import * as express from 'express' -import { query, validationResult } from 'express-validator' +import express from 'express' +import { param, validationResult } from 'express-validator' +import { isIdOrUUIDValid, toCompleteUUID } from '@server/helpers/custom-validators/misc' import { logger } from '../../../helpers/logger' -function areValidationErrors (req: express.Request, res: express.Response) { +function areValidationErrors ( + req: express.Request, + res: express.Response, + options: { + omitLog?: boolean + omitBodyLog?: boolean + tags?: string[] + } = {}) { + const { omitLog = false, omitBodyLog = false, tags = [] } = options + + if (!omitLog) { + logger.debug( + 'Checking %s - %s parameters', + req.method, req.originalUrl, + { + body: omitBodyLog + ? 'omitted' + : req.body, + params: req.params, + query: req.query, + files: req.files, + tags + } + ) + } + const errors = validationResult(req) if (!errors.isEmpty()) { logger.warn('Incorrect request parameters', { path: req.originalUrl, err: errors.mapped() }) + res.fail({ message: 'Incorrect request parameters: ' + Object.keys(errors.mapped()).join(', '), instance: req.originalUrl, @@ -21,30 +48,22 @@ function areValidationErrors (req: express.Request, res: express.Response) { return false } -function checkSort (sortableColumns: string[], tags: string[] = []) { - return [ - query('sort').optional().isIn(sortableColumns).withMessage('Should have correct sortable column'), - - (req: express.Request, res: express.Response, next: express.NextFunction) => { - logger.debug('Checking sort parameters', { parameters: req.query, tags }) - - if (areValidationErrors(req, res)) return - - return next() - } - ] +function isValidVideoIdParam (paramName: string) { + return param(paramName) + .customSanitizer(toCompleteUUID) + .custom(isIdOrUUIDValid).withMessage('Should have a valid video id (id, short UUID or UUID)') } -function createSortableColumns (sortableColumns: string[]) { - const sortableColumnDesc = sortableColumns.map(sortableColumn => '-' + sortableColumn) - - return sortableColumns.concat(sortableColumnDesc) +function isValidPlaylistIdParam (paramName: string) { + return param(paramName) + .customSanitizer(toCompleteUUID) + .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id (id, short UUID or UUID)') } // --------------------------------------------------------------------------- export { areValidationErrors, - checkSort, - createSortableColumns + isValidVideoIdParam, + isValidPlaylistIdParam }