X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fcustom-validators%2Fmisc.ts;h=0c3df1cd0800777a28fc13d8eaa9d69d2b5c58e5;hb=43d0ea7f4b88d52097172cc0c1831edd7e492503;hp=3a3deab0c8f7b152ac56d08348d003b84286c247;hpb=97567dd81f508dd6295ac4d73d849aa2ce0a6549;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/custom-validators/misc.ts b/server/helpers/custom-validators/misc.ts index 3a3deab0c..0c3df1cd0 100644 --- a/server/helpers/custom-validators/misc.ts +++ b/server/helpers/custom-validators/misc.ts @@ -1,10 +1,18 @@ import 'multer' import * as validator from 'validator' +import { sep } from 'path' function exists (value: any) { return value !== undefined && value !== null } +function isSafePath (p: string) { + return exists(p) && + (p + '').split(sep).every(part => { + return [ '..' ].includes(part) === false + }) +} + function isArray (value: any) { return Array.isArray(value) } @@ -38,9 +46,21 @@ function isBooleanValid (value: any) { } function toIntOrNull (value: string) { - if (value === 'null') return null + const v = toValueOrNull(value) + + if (v === null || v === undefined) return v + if (typeof v === 'number') return v + + return validator.toInt('' + v) +} + +function toBooleanOrNull (value: any) { + const v = toValueOrNull(value) + + if (v === null || v === undefined) return v + if (typeof v === 'boolean') return v - return validator.toInt(value) + return validator.toBoolean('' + v) } function toValueOrNull (value: string) { @@ -97,10 +117,12 @@ export { isNotEmptyIntArray, isArray, isIdValid, + isSafePath, isUUIDValid, isIdOrUUIDValid, isDateValid, toValueOrNull, + toBooleanOrNull, isBooleanValid, toIntOrNull, toArray,