Fix express validator
authorChocobozzz <me@florianbigard.com>
Thu, 25 Jul 2019 14:23:44 +0000 (16:23 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 25 Jul 2019 14:23:44 +0000 (16:23 +0200)
51 files changed:
client/src/app/shared/video/infinite-scroller.directive.ts
client/src/app/shared/video/video-miniature.component.html
client/src/app/videos/+video-watch/video-watch.component.ts
server/helpers/custom-validators/accounts.ts
server/helpers/custom-validators/misc.ts
server/helpers/custom-validators/search.ts
server/helpers/custom-validators/servers.ts
server/helpers/custom-validators/users.ts
server/helpers/custom-validators/video-channels.ts
server/helpers/custom-validators/video-comments.ts
server/helpers/custom-validators/video-imports.ts
server/helpers/custom-validators/videos.ts
server/middlewares/oauth.ts
server/middlewares/pagination.ts
server/middlewares/servers.ts
server/middlewares/sort.ts
server/middlewares/user-right.ts
server/middlewares/validators/account.ts
server/middlewares/validators/activitypub/signature.ts
server/middlewares/validators/avatar.ts
server/middlewares/validators/blocklist.ts
server/middlewares/validators/config.ts
server/middlewares/validators/feeds.ts
server/middlewares/validators/follows.ts
server/middlewares/validators/jobs.ts
server/middlewares/validators/logs.ts
server/middlewares/validators/oembed.ts
server/middlewares/validators/pagination.ts
server/middlewares/validators/plugins.ts
server/middlewares/validators/redundancy.ts
server/middlewares/validators/search.ts
server/middlewares/validators/server.ts
server/middlewares/validators/themes.ts
server/middlewares/validators/user-history.ts
server/middlewares/validators/user-notifications.ts
server/middlewares/validators/user-subscriptions.ts
server/middlewares/validators/users.ts
server/middlewares/validators/utils.ts
server/middlewares/validators/videos/video-abuses.ts
server/middlewares/validators/videos/video-blacklist.ts
server/middlewares/validators/videos/video-captions.ts
server/middlewares/validators/videos/video-channels.ts
server/middlewares/validators/videos/video-comments.ts
server/middlewares/validators/videos/video-imports.ts
server/middlewares/validators/videos/video-playlists.ts
server/middlewares/validators/videos/video-rates.ts
server/middlewares/validators/videos/video-shares.ts
server/middlewares/validators/videos/video-watch.ts
server/middlewares/validators/videos/videos.ts
server/middlewares/validators/webfinger.ts
server/tests/api/check-params/video-imports.ts

index 5f8a1dd6e49606ec65294f8b4ad9b22a02db8a0a..b1e88882c546333d7de8b586bcbb0fad6d8be517 100644 (file)
@@ -39,7 +39,7 @@ export class InfiniteScrollerDirective implements OnInit, OnDestroy {
 
     const scrollObservable = fromEvent(this.container || window, 'scroll')
       .pipe(
-        startWith(null),
+        startWith(null as string), // FIXME: typings
         throttleTime(200, undefined, throttleOptions),
         map(() => this.getScrollInfo()),
         distinctUntilChanged((o1, o2) => o1.current === o2.current),
index 7af0f111380eeccb670baa5db0e507c6836783db..51ca1393dfb8735e558fd69d2a735f51a665f3e2 100644 (file)
@@ -31,7 +31,7 @@
 
       <div class="video-info-privacy">
         <ng-container *ngIf="displayOptions.privacyText">{{ video.privacy.label }}</ng-container>
-        <ng-container *ngIf="displayOptions.privacyText && displayOptions.state"> - </ng-container>
+        <ng-container *ngIf="displayOptions.privacyText && getStateLabel(video)"> - </ng-container>
         <ng-container *ngIf="displayOptions.state">{{ getStateLabel(video) }}</ng-container>
       </div>
 
index 027c2b026cd3d9a3a0b3332cc61dd8745972c632..0d499d47f74930f29e71e0d7f6ec443ccc38f22c 100644 (file)
@@ -255,10 +255,10 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
     )
 
     // Video did change
-    forkJoin(
+    forkJoin([
       videoObs,
       this.videoCaptionService.listCaptions(videoId)
-    )
+    ])
       .pipe(
         // If 401, the video is private or blacklisted so redirect to 404
         catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ]))
index be196d2a46451ad4cdef645ee72ad101aef20da1..f676669ea6c557d232af78997371a147490a39d8 100644 (file)
@@ -1,4 +1,3 @@
-import 'express-validator'
 import { isUserDescriptionValid, isUserUsernameValid } from './users'
 import { exists } from './misc'
 
index 3ef38fce1d0b135625647e24dfbbd3671d86595a..1b7e00431094aef26d0d15369b7f53467e7171ea 100644 (file)
@@ -1,6 +1,7 @@
 import 'multer'
 import * as validator from 'validator'
 import { sep } from 'path'
+import toBoolean = require('validator/lib/toBoolean')
 
 function exists (value: any) {
   return value !== undefined && value !== null
@@ -46,9 +47,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 toBoolean(v)
 }
 
 function toValueOrNull (value: string) {
@@ -110,6 +123,7 @@ export {
   isIdOrUUIDValid,
   isDateValid,
   toValueOrNull,
+  toBooleanOrNull,
   isBooleanValid,
   toIntOrNull,
   toArray,
index 15b389a58e5969f36070c1cd59e859ec737c8d9f..ee732b15aa1f83b0a1253249d65a02f52e2b045d 100644 (file)
@@ -1,6 +1,4 @@
 import * as validator from 'validator'
-import 'express-validator'
-
 import { isArray } from './misc'
 
 function isNumberArray (value: any) {
index 5c8bf0d2d5d5183371da02b482eba098d8770d31..7ced36fd3339ade18f54c6014ac5bb6d1151e3ef 100644 (file)
@@ -1,7 +1,5 @@
 import * as validator from 'validator'
-import 'express-validator'
-
-import { isArray, exists } from './misc'
+import { exists, isArray } from './misc'
 import { isTestInstance } from '../core-utils'
 import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
 
index 738d5cbbf93c002e5dd17b4deaca85434bf93bd6..c56ae14ef81d7d89d6904fce26aab9f2b65ce861 100644 (file)
@@ -1,4 +1,3 @@
-import 'express-validator'
 import * as validator from 'validator'
 import { UserRole } from '../../../shared'
 import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
index f55f0c8ef12083fb423541734fc5650427e67200..6c52dc093e858bb42756e7724c7bd795d6a72478 100644 (file)
@@ -1,5 +1,3 @@
-import 'express-validator'
-import 'multer'
 import * as validator from 'validator'
 import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
 import { exists } from './misc'
index 0707e2af2638ed5f645966e9f5317d4c25af1d7e..8a7cd7105def421136eab5409fa7e98c2b298a4d 100644 (file)
@@ -1,4 +1,3 @@
-import 'express-validator'
 import 'multer'
 import * as validator from 'validator'
 import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
index f4235e2fa788e3877ba259228eb68d7dc30f5463..8820c4c0aa47f2a27ca75124b9c0383f8d5994c3 100644 (file)
@@ -1,4 +1,3 @@
-import 'express-validator'
 import 'multer'
 import * as validator from 'validator'
 import { CONSTRAINTS_FIELDS, MIMETYPES, VIDEO_IMPORT_STATES } from '../../initializers/constants'
index 157e1a8e3eb80cb70877ebbfd34f2ec672e8aa41..9ab1ef23437e019ae222f7dba5fa510bd3c61a38 100644 (file)
@@ -1,9 +1,6 @@
-import { Response } from 'express'
-import 'express-validator'
 import { values } from 'lodash'
-import 'multer'
 import * as validator from 'validator'
-import { UserRight, VideoFilter, VideoPrivacy, VideoRateType } from '../../../shared'
+import { VideoFilter, VideoPrivacy, VideoRateType } from '../../../shared'
 import {
   CONSTRAINTS_FIELDS,
   MIMETYPES,
@@ -13,9 +10,7 @@ import {
   VIDEO_RATE_TYPES,
   VIDEO_STATES
 } from '../../initializers/constants'
-import { VideoModel } from '../../models/video/video'
 import { exists, isArray, isDateValid, isFileValid } from './misc'
-import { UserModel } from '../../models/account/user'
 import * as magnetUtil from 'magnet-uri'
 
 const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS
index 2b4e300e444bf326c84ac6badc188fe545a125cb..77fb305dd5247063b538a502def2aa3df3d2e7a0 100644 (file)
@@ -1,6 +1,5 @@
 import * as express from 'express'
 import * as OAuthServer from 'express-oauth-server'
-import 'express-validator'
 import { OAUTH_LIFETIME } from '../initializers/constants'
 import { logger } from '../helpers/logger'
 import { Socket } from 'socket.io'
index 83304940f38af1bc386e045717375b1dab47af3d..043869303f72f0139de9dcbd377a83fbdc89e276 100644 (file)
@@ -1,6 +1,4 @@
-import 'express-validator'
 import * as express from 'express'
-
 import { PAGINATION } from '../initializers/constants'
 
 function setDefaultPagination (req: express.Request, res: express.Response, next: express.NextFunction) {
index c52f4685b94785b94f10e4e65aca0f5ff3fcfc22..9c0af443a5fa060c35e27af98bba9dd06deab9cd 100644 (file)
@@ -1,5 +1,4 @@
 import * as express from 'express'
-import 'express-validator'
 import { getHostWithPort } from '../helpers/express-utils'
 
 function setBodyHostsPort (req: express.Request, res: express.Response, next: express.NextFunction) {
index 6507aa5b8b54a7396cb0d59dc149757f26d7ae62..8c27e82379bfbb2b09f04b1bd249ea859ab9f2f3 100644 (file)
@@ -1,5 +1,4 @@
 import * as express from 'express'
-import 'express-validator'
 import { SortType } from '../models/utils'
 
 function setDefaultSort (req: express.Request, res: express.Response, next: express.NextFunction) {
index 498e3d677738aa9b9d9df2774d259ad867830637..4da7b9802516d02c0ac028557e15878dc119bb8a 100644 (file)
@@ -1,5 +1,4 @@
 import * as express from 'express'
-import 'express-validator'
 import { UserRight } from '../../shared'
 import { logger } from '../helpers/logger'
 
index 67e4bf8cca25f3063d3f7a6e614f77025ca76a30..cbdcef2fd480298ab4f966f8c5bf0413138d77d4 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { param } from 'express-validator/check'
+import { param } from 'express-validator'
 import { isAccountNameValid } from '../../helpers/custom-validators/accounts'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
index be14e92eac3bbd921785e4edb55625093310031b..02b191480b022ba401663e9211b5c5a4f119da37 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { body } from 'express-validator/check'
+import { body } from 'express-validator'
 import {
   isSignatureCreatorValid, isSignatureTypeValid,
   isSignatureValueValid
index bab3ed118cd6858d48e16e58842618766ac4e4c9..8623d07e8064729c94ae44bafb54b134a163066d 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { body } from 'express-validator/check'
+import { body } from 'express-validator'
 import { isAvatarFile } from '../../helpers/custom-validators/users'
 import { areValidationErrors } from './utils'
 import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
index 63d95e9e04d17650adeecf59bcee2c4c3f14042a..47a0b1a1c13135de8ca6db78e40df96e3a637d4d 100644 (file)
@@ -1,4 +1,4 @@
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import * as express from 'express'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
index 9c43da1654fbf2c55f9081321c2ca201fe73f6c8..5059ed0f2994a10ec328b28b77127695f74f9cfc 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { body } from 'express-validator/check'
+import { body } from 'express-validator'
 import { isUserNSFWPolicyValid, isUserVideoQuotaDailyValid, isUserVideoQuotaValid } from '../../helpers/custom-validators/users'
 import { logger } from '../../helpers/logger'
 import { CustomConfig } from '../../../shared/models/server/custom-config.model'
index fa130121fd9eeb3e3cf08d5117d3a14e5f545567..1bef9891b358e304613c3d440444d44031e6db4d 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { param, query } from 'express-validator/check'
+import { param, query } from 'express-validator'
 import { isIdOrUUIDValid, isIdValid } from '../../helpers/custom-validators/misc'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
index 2e5a02307743d16ef3bef12dfadf48f7e4377b1b..c3d772297eb303fbf904316ba02a3b5714daea86 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import { isTestInstance } from '../../helpers/core-utils'
 import { isEachUniqueHostValid, isHostValid } from '../../helpers/custom-validators/servers'
 import { logger } from '../../helpers/logger'
index 2f8b1738c5054552b782aa359a646929153a19fb..41a8d689962e6bcf6674d0f0c4c9a59ebce3fd36 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { param } from 'express-validator/check'
+import { param } from 'express-validator'
 import { isValidJobState } from '../../helpers/custom-validators/jobs'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
index 7380c6edde6a174fb7fdf1656e8b86a686f25d9a..07f3f552f40bbe076f75cffb4a46439981d8de5d 100644 (file)
@@ -2,7 +2,7 @@ import * as express from 'express'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { isDateValid } from '../../helpers/custom-validators/misc'
-import { query } from 'express-validator/check'
+import { query } from 'express-validator'
 import { isValidLogLevel } from '../../helpers/custom-validators/logs'
 
 const getLogsValidator = [
index 5053199803a4a4f1baa2d2e2944414e03d6fb3b7..24ba5569dc9f1fd9f62a815bea870afe19ea0f3c 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { query } from 'express-validator/check'
+import { query } from 'express-validator'
 import { join } from 'path'
 import { isTestInstance } from '../../helpers/core-utils'
 import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc'
index e1ed8cd65cb6979c7c85fdb1aee46f1b6cceec01..80ae57c0bba7d790130cf7f31d406be29a2c92e1 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { query } from 'express-validator/check'
+import { query } from 'express-validator'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 
index dc3f1454aecea50982fa8f1d51d32ca1de133c78..910d03c2938e313c65e532875aba3984bb13f290 100644 (file)
@@ -1,10 +1,10 @@
 import * as express from 'express'
-import { body, param, query } from 'express-validator/check'
+import { body, param, query } from 'express-validator'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { isNpmPluginNameValid, isPluginNameValid, isPluginTypeValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins'
 import { PluginManager } from '../../lib/plugins/plugin-manager'
-import { isBooleanValid, isSafePath } from '../../helpers/custom-validators/misc'
+import { isBooleanValid, isSafePath, toBooleanOrNull } from '../../helpers/custom-validators/misc'
 import { PluginModel } from '../../models/server/plugin'
 import { InstallOrUpdatePlugin } from '../../../shared/models/plugins/install-plugin.model'
 import { PluginType } from '../../../shared/models/plugins/plugin.type'
@@ -39,7 +39,7 @@ const listPluginsValidator = [
     .custom(isPluginTypeValid).withMessage('Should have a valid plugin type'),
   query('uninstalled')
     .optional()
-    .toBoolean()
+    .customSanitizer(toBooleanOrNull)
     .custom(isBooleanValid).withMessage('Should have a valid uninstalled attribute'),
 
   (req: express.Request, res: express.Response, next: express.NextFunction) => {
index edc53a6b268552d47155bce1fe9d30563ff538de..1fdac0e4e2c38f38ad3c9a6f03130ee4f87b5900 100644 (file)
@@ -1,7 +1,6 @@
 import * as express from 'express'
-import 'express-validator'
-import { body, param } from 'express-validator/check'
-import { exists, isBooleanValid, isIdOrUUIDValid, toIntOrNull } from '../../helpers/custom-validators/misc'
+import { body, param } from 'express-validator'
+import { exists, isBooleanValid, isIdOrUUIDValid, toBooleanOrNull, toIntOrNull } from '../../helpers/custom-validators/misc'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy'
@@ -68,7 +67,7 @@ const videoPlaylistRedundancyGetValidator = [
 const updateServerRedundancyValidator = [
   param('host').custom(isHostValid).withMessage('Should have a valid host'),
   body('redundancyAllowed')
-    .toBoolean()
+    .customSanitizer(toBooleanOrNull)
     .custom(isBooleanValid).withMessage('Should have a valid redundancyAllowed attribute'),
 
   async (req: express.Request, res: express.Response, next: express.NextFunction) => {
index 7816d229c65aa9e6170a56ffc869bf8ca48faa0f..5a3c83f2ca9bbe18033426fbca9c4c618907cafc 100644 (file)
@@ -1,7 +1,7 @@
 import * as express from 'express'
 import { areValidationErrors } from './utils'
 import { logger } from '../../helpers/logger'
-import { query } from 'express-validator/check'
+import { query } from 'express-validator'
 import { isDateValid } from '../../helpers/custom-validators/misc'
 
 const videosSearchValidator = [
index 6eff8e9ee9eea056a2192938d50fbf5c0f5f0ee3..f6812647bf3cc8cce20f6b902d98ef2742e1e4ee 100644 (file)
@@ -3,7 +3,7 @@ import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { isHostValid, isValidContactBody } from '../../helpers/custom-validators/servers'
 import { ServerModel } from '../../models/server/server'
-import { body } from 'express-validator/check'
+import { body } from 'express-validator'
 import { isUserDisplayNameValid } from '../../helpers/custom-validators/users'
 import { Emailer } from '../../lib/emailer'
 import { Redis } from '../../lib/redis'
index 642f2df78fbc8589695ed225bdaa98869a13419f..24a9673f788d5c08194a3cecf81e518b5d77626a 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { param } from 'express-validator/check'
+import { param } from 'express-validator'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { isPluginNameValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins'
index 418313d09812d8a365f757b0b15462c05d54e49c..2f1d3cc4134ecb1ec2e424fa6fa366aac034ebd0 100644 (file)
@@ -1,6 +1,5 @@
 import * as express from 'express'
-import 'express-validator'
-import { body } from 'express-validator/check'
+import { body } from 'express-validator'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { isDateValid } from '../../helpers/custom-validators/misc'
index 3ded8d8cf9c01e9039d40edc64efb6a9f9f8b9dd..308b326552c552ec9f105b9c5f35f7831efc66c1 100644 (file)
@@ -1,15 +1,14 @@
 import * as express from 'express'
-import 'express-validator'
-import { body, query } from 'express-validator/check'
+import { body, query } from 'express-validator'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { isUserNotificationSettingValid } from '../../helpers/custom-validators/user-notifications'
-import { isNotEmptyIntArray } from '../../helpers/custom-validators/misc'
+import { isNotEmptyIntArray, toBooleanOrNull } from '../../helpers/custom-validators/misc'
 
 const listUserNotificationsValidator = [
   query('unread')
     .optional()
-    .toBoolean()
+    .customSanitizer(toBooleanOrNull)
     .isBoolean().withMessage('Should have a valid unread boolean'),
 
   (req: express.Request, res: express.Response, next: express.NextFunction) => {
index 2356745d7e6438c7236c36fa3130766681b19174..9bc8c87e74b28164d3cd4edd9c896a71607d2d92 100644 (file)
@@ -1,6 +1,5 @@
 import * as express from 'express'
-import 'express-validator'
-import { body, param, query } from 'express-validator/check'
+import { body, param, query } from 'express-validator'
 import { logger } from '../../helpers/logger'
 import { areValidationErrors } from './utils'
 import { ActorFollowModel } from '../../models/activitypub/actor-follow'
index 7002de20d632e59c378ff9548668e1f1d6bb0034..db03dc23161a9e45165e4ec5fd86a3d576291af0 100644 (file)
@@ -1,9 +1,8 @@
 import * as Bluebird from 'bluebird'
 import * as express from 'express'
-import 'express-validator'
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import { omit } from 'lodash'
-import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc'
+import { isIdOrUUIDValid, toIntOrNull } from '../../helpers/custom-validators/misc'
 import {
   isUserAdminFlagsValid,
   isUserAutoPlayVideoValid,
@@ -358,7 +357,7 @@ const usersVerifyEmailValidator = [
     .not().isEmpty().withMessage('Should have a valid verification string'),
   body('isPendingEmail')
     .optional()
-    .toBoolean(),
+    .customSanitizer(toIntOrNull),
 
   async (req: express.Request, res: express.Response, next: express.NextFunction) => {
     logger.debug('Checking usersVerifyEmail parameters', { parameters: req.params })
index 8f77c9fbd84060118df26ab1a6b8607b19d28f7a..43e5652fa2c2764706da943d5eb122b78ac46230 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { query, validationResult } from 'express-validator/check'
+import { query, validationResult } from 'express-validator'
 import { logger } from '../../helpers/logger'
 
 function areValidationErrors (req: express.Request, res: express.Response) {
index e176e01af6256e9119a7ceb35b0306baffaa42c6..e27d91bb12cb4e3820de54d3e6b6f78e6fe8b448 100644 (file)
@@ -1,6 +1,5 @@
 import * as express from 'express'
-import 'express-validator'
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc'
 import { logger } from '../../../helpers/logger'
 import { areValidationErrors } from '../utils'
index db59427c74af544603e34214f99d5810ac4c91a1..3e8c5b30c96942b4f0de830b0a906206dd0456d8 100644 (file)
@@ -1,6 +1,6 @@
 import * as express from 'express'
-import { body, param, query } from 'express-validator/check'
-import { isBooleanValid, isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
+import { body, param, query } from 'express-validator'
+import { isBooleanValid, isIdOrUUIDValid, toBooleanOrNull } from '../../../helpers/custom-validators/misc'
 import { logger } from '../../../helpers/logger'
 import { areValidationErrors } from '../utils'
 import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../../helpers/custom-validators/video-blacklist'
@@ -24,7 +24,7 @@ const videosBlacklistAddValidator = [
   param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid videoId'),
   body('unfederate')
     .optional()
-    .toBoolean()
+    .customSanitizer(toBooleanOrNull)
     .custom(isBooleanValid).withMessage('Should have a valid unfederate boolean'),
   body('reason')
     .optional()
index f8739e27f85e18b7e36da2a04c5509b0d32fa962..f5610222aceb4f0bfede12862d14869fa8b9a38e 100644 (file)
@@ -1,7 +1,7 @@
 import * as express from 'express'
 import { areValidationErrors } from '../utils'
 import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import { CONSTRAINTS_FIELDS } from '../../../initializers/constants'
 import { UserRight } from '../../../../shared'
 import { logger } from '../../../helpers/logger'
index c1065b898b82ede68764a96806848184d10df0f1..3ee5064fc6990002c519cde97d359dab0bdd6329 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import { UserRight } from '../../../../shared'
 import {
   isVideoChannelDescriptionValid,
index 1e3e42833c8628d566503a08721a18e722b94051..83a0c24b030ca49a05467fb79a1329a10b9be9df 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import { UserRight } from '../../../../shared'
 import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc'
 import { isValidVideoCommentText } from '../../../helpers/custom-validators/video-comments'
index 8b0dd8960d77dac1ebf4e73ca6a964f0cf003b67..318dad10087b50e0fcaa25338aea8d2ed94bef21 100644 (file)
@@ -1,6 +1,6 @@
 import * as express from 'express'
-import { body } from 'express-validator/check'
-import { isIdValid } from '../../../helpers/custom-validators/misc'
+import { body } from 'express-validator'
+import { isIdValid, toIntOrNull } from '../../../helpers/custom-validators/misc'
 import { logger } from '../../../helpers/logger'
 import { areValidationErrors } from '../utils'
 import { getCommonVideoEditAttributes } from './videos'
@@ -13,7 +13,7 @@ import { doesVideoChannelOfAccountExist } from '../../../helpers/middlewares'
 
 const videoImportAddValidator = getCommonVideoEditAttributes().concat([
   body('channelId')
-    .toInt()
+    .customSanitizer(toIntOrNull)
     .custom(isIdValid).withMessage('Should have correct video channel id'),
   body('targetUrl')
     .optional()
index 638122a2e871997e8ca304c3d3a634c9ba5efb0b..2e9c8aa3341b13c427be5a7dd22b55e95d606e0a 100644 (file)
@@ -1,12 +1,20 @@
 import * as express from 'express'
-import { body, param, query, ValidationChain } from 'express-validator/check'
+import { body, param, query, ValidationChain } from 'express-validator'
 import { UserRight, VideoPlaylistCreate, VideoPlaylistUpdate } from '../../../../shared'
 import { logger } from '../../../helpers/logger'
 import { UserModel } from '../../../models/account/user'
 import { areValidationErrors } from '../utils'
 import { isVideoImage } from '../../../helpers/custom-validators/videos'
 import { CONSTRAINTS_FIELDS } from '../../../initializers/constants'
-import { isArrayOf, isIdOrUUIDValid, isIdValid, isUUIDValid, toIntArray, toValueOrNull } from '../../../helpers/custom-validators/misc'
+import {
+  isArrayOf,
+  isIdOrUUIDValid,
+  isIdValid,
+  isUUIDValid,
+  toIntArray,
+  toIntOrNull,
+  toValueOrNull
+} from '../../../helpers/custom-validators/misc'
 import {
   isVideoPlaylistDescriptionValid,
   isVideoPlaylistNameValid,
@@ -374,12 +382,11 @@ function getCommonPlaylistEditAttributes () {
       .custom(isVideoPlaylistDescriptionValid).withMessage('Should have a valid description'),
     body('privacy')
       .optional()
-      .toInt()
+      .customSanitizer(toIntOrNull)
       .custom(isVideoPlaylistPrivacyValid).withMessage('Should have correct playlist privacy'),
     body('videoChannelId')
       .optional()
-      .customSanitizer(toValueOrNull)
-      .toInt()
+      .customSanitizer(toIntOrNull)
   ] as (ValidationChain | express.Handler)[]
 }
 
index 5bb3f4a5170234d65c96cbc1e36678b6a8c6c62d..4021cfecc8f6cddc580fdc0814d6decc690cba90 100644 (file)
@@ -1,6 +1,5 @@
 import * as express from 'express'
-import 'express-validator'
-import { body, param, query } from 'express-validator/check'
+import { body, param, query } from 'express-validator'
 import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
 import { isRatingValid } from '../../../helpers/custom-validators/video-rates'
 import { isVideoRatingTypeValid } from '../../../helpers/custom-validators/videos'
index 6f4a1f3e064f311c27bec5749bdee6ef26fa6cd3..ace62be5cade3a1171e6043cd8cad653c356bd05 100644 (file)
@@ -1,6 +1,5 @@
 import * as express from 'express'
-import 'express-validator'
-import { param } from 'express-validator/check'
+import { param } from 'express-validator'
 import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc'
 import { logger } from '../../../helpers/logger'
 import { VideoShareModel } from '../../../models/video/video-share'
index a0b530c75509cdfaf0ba6c328ccf0c5547148d03..d6ca1d3412064371c13bd41ca0b09f64355055f0 100644 (file)
@@ -1,6 +1,6 @@
-import { body, param } from 'express-validator/check'
+import { body, param } from 'express-validator'
 import * as express from 'express'
-import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
+import { isIdOrUUIDValid, toIntOrNull } from '../../../helpers/custom-validators/misc'
 import { areValidationErrors } from '../utils'
 import { logger } from '../../../helpers/logger'
 import { doesVideoExist } from '../../../helpers/middlewares'
@@ -8,7 +8,7 @@ import { doesVideoExist } from '../../../helpers/middlewares'
 const videoWatchingValidator = [
   param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'),
   body('currentTime')
-    .toInt()
+    .customSanitizer(toIntOrNull)
     .isInt().withMessage('Should have correct current time'),
 
   async (req: express.Request, res: express.Response, next: express.NextFunction) => {
index 8f5e5c95c26db7c62756d7fe54964c4f2316a8bb..27dfe91ca9ac923bacf3c55d0c0fe3b4198a586f 100644 (file)
@@ -1,6 +1,5 @@
 import * as express from 'express'
-import 'express-validator'
-import { body, param, query, ValidationChain } from 'express-validator/check'
+import { body, param, query, ValidationChain } from 'express-validator'
 import { UserRight, VideoChangeOwnershipStatus, VideoPrivacy } from '../../../../shared'
 import {
   isBooleanValid,
@@ -9,6 +8,7 @@ import {
   isIdValid,
   isUUIDValid,
   toArray,
+  toBooleanOrNull,
   toIntOrNull,
   toValueOrNull
 } from '../../../helpers/custom-validators/misc'
@@ -53,7 +53,7 @@ const videosAddValidator = getCommonVideoEditAttributes().concat([
     ),
   body('name').custom(isVideoNameValid).withMessage('Should have a valid name'),
   body('channelId')
-    .toInt()
+    .customSanitizer(toIntOrNull)
     .custom(isIdValid).withMessage('Should have correct video channel id'),
 
   async (req: express.Request, res: express.Response, next: express.NextFunction) => {
@@ -101,7 +101,7 @@ const videosUpdateValidator = getCommonVideoEditAttributes().concat([
     .custom(isVideoNameValid).withMessage('Should have a valid name'),
   body('channelId')
     .optional()
-    .toInt()
+    .customSanitizer(toIntOrNull)
     .custom(isIdValid).withMessage('Should have correct video channel id'),
 
   async (req: express.Request, res: express.Response, next: express.NextFunction) => {
@@ -307,15 +307,15 @@ function getCommonVideoEditAttributes () {
       .custom(isVideoLanguageValid).withMessage('Should have a valid language'),
     body('nsfw')
       .optional()
-      .toBoolean()
+      .customSanitizer(toBooleanOrNull)
       .custom(isBooleanValid).withMessage('Should have a valid NSFW attribute'),
     body('waitTranscoding')
       .optional()
-      .toBoolean()
+      .customSanitizer(toBooleanOrNull)
       .custom(isBooleanValid).withMessage('Should have a valid wait transcoding attribute'),
     body('privacy')
       .optional()
-      .toInt()
+      .customSanitizer(toValueOrNull)
       .custom(isVideoPrivacyValid).withMessage('Should have correct video privacy'),
     body('description')
       .optional()
@@ -331,16 +331,16 @@ function getCommonVideoEditAttributes () {
       .custom(isVideoTagsValid).withMessage('Should have correct tags'),
     body('commentsEnabled')
       .optional()
-      .toBoolean()
+      .customSanitizer(toBooleanOrNull)
       .custom(isBooleanValid).withMessage('Should have comments enabled boolean'),
     body('downloadEnabled')
       .optional()
-      .toBoolean()
+      .customSanitizer(toBooleanOrNull)
       .custom(isBooleanValid).withMessage('Should have downloading enabled boolean'),
     body('originallyPublishedAt')
-        .optional()
-        .customSanitizer(toValueOrNull)
-        .custom(isVideoOriginallyPublishedAtValid).withMessage('Should have a valid original publication date'),
+      .optional()
+      .customSanitizer(toValueOrNull)
+      .custom(isVideoOriginallyPublishedAtValid).withMessage('Should have a valid original publication date'),
     body('scheduleUpdate')
       .optional()
       .customSanitizer(toValueOrNull),
@@ -349,7 +349,7 @@ function getCommonVideoEditAttributes () {
       .custom(isDateValid).withMessage('Should have a valid schedule update date'),
     body('scheduleUpdate.privacy')
       .optional()
-      .toInt()
+      .customSanitizer(toValueOrNull)
       .custom(isScheduleVideoUpdatePrivacyValid).withMessage('Should have correct schedule update privacy')
   ] as (ValidationChain | express.Handler)[]
 }
index 63a1678ec9aa720e4790a3d822815b4011fe697c..d7cfe17f00ea41ab0c43e7f6dfc002e999109f2e 100644 (file)
@@ -1,5 +1,5 @@
 import * as express from 'express'
-import { query } from 'express-validator/check'
+import { query } from 'express-validator'
 import { isWebfingerLocalResourceValid } from '../../helpers/custom-validators/webfinger'
 import { logger } from '../../helpers/logger'
 import { ActorModel } from '../../models/activitypub/actor'
index 8ff115e7bb352baa6f33aecc3c359eadaba1c3ad..231d5cc85627f46f071a3e1059a19c7bdaf55680 100644 (file)
@@ -91,7 +91,7 @@ describe('Test video imports API validator', function () {
         support: 'my super support text',
         tags: [ 'tag1', 'tag2' ],
         privacy: VideoPrivacy.PUBLIC,
-        channelId: channelId
+        channelId
       }
     })