diff --git a/client/src/app/shared/video/infinite-scroller.directive.ts b/client/src/app/shared/video/infinite-scroller.directive.ts index 5f8a1dd6e..b1e88882c 100644 --- a/client/src/app/shared/video/infinite-scroller.directive.ts +++ b/client/src/app/shared/video/infinite-scroller.directive.ts @@ -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), diff --git a/client/src/app/shared/video/video-miniature.component.html b/client/src/app/shared/video/video-miniature.component.html index 7af0f1113..51ca1393d 100644 --- a/client/src/app/shared/video/video-miniature.component.html +++ b/client/src/app/shared/video/video-miniature.component.html @@ -31,7 +31,7 @@
{{ video.privacy.label }} - - + - {{ getStateLabel(video) }}
diff --git a/client/src/app/videos/+video-watch/video-watch.component.ts b/client/src/app/videos/+video-watch/video-watch.component.ts index 027c2b026..0d499d47f 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.ts +++ b/client/src/app/videos/+video-watch/video-watch.component.ts @@ -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 ])) diff --git a/server/helpers/custom-validators/accounts.ts b/server/helpers/custom-validators/accounts.ts index be196d2a4..f676669ea 100644 --- a/server/helpers/custom-validators/accounts.ts +++ b/server/helpers/custom-validators/accounts.ts @@ -1,4 +1,3 @@ -import 'express-validator' import { isUserDescriptionValid, isUserUsernameValid } from './users' import { exists } from './misc' diff --git a/server/helpers/custom-validators/misc.ts b/server/helpers/custom-validators/misc.ts index 3ef38fce1..1b7e00431 100644 --- a/server/helpers/custom-validators/misc.ts +++ b/server/helpers/custom-validators/misc.ts @@ -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) - return validator.toInt(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 toBoolean(v) } function toValueOrNull (value: string) { @@ -110,6 +123,7 @@ export { isIdOrUUIDValid, isDateValid, toValueOrNull, + toBooleanOrNull, isBooleanValid, toIntOrNull, toArray, diff --git a/server/helpers/custom-validators/search.ts b/server/helpers/custom-validators/search.ts index 15b389a58..ee732b15a 100644 --- a/server/helpers/custom-validators/search.ts +++ b/server/helpers/custom-validators/search.ts @@ -1,6 +1,4 @@ import * as validator from 'validator' -import 'express-validator' - import { isArray } from './misc' function isNumberArray (value: any) { diff --git a/server/helpers/custom-validators/servers.ts b/server/helpers/custom-validators/servers.ts index 5c8bf0d2d..7ced36fd3 100644 --- a/server/helpers/custom-validators/servers.ts +++ b/server/helpers/custom-validators/servers.ts @@ -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' diff --git a/server/helpers/custom-validators/users.ts b/server/helpers/custom-validators/users.ts index 738d5cbbf..c56ae14ef 100644 --- a/server/helpers/custom-validators/users.ts +++ b/server/helpers/custom-validators/users.ts @@ -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' diff --git a/server/helpers/custom-validators/video-channels.ts b/server/helpers/custom-validators/video-channels.ts index f55f0c8ef..6c52dc093 100644 --- a/server/helpers/custom-validators/video-channels.ts +++ b/server/helpers/custom-validators/video-channels.ts @@ -1,5 +1,3 @@ -import 'express-validator' -import 'multer' import * as validator from 'validator' import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { exists } from './misc' diff --git a/server/helpers/custom-validators/video-comments.ts b/server/helpers/custom-validators/video-comments.ts index 0707e2af2..8a7cd7105 100644 --- a/server/helpers/custom-validators/video-comments.ts +++ b/server/helpers/custom-validators/video-comments.ts @@ -1,4 +1,3 @@ -import 'express-validator' import 'multer' import * as validator from 'validator' import { CONSTRAINTS_FIELDS } from '../../initializers/constants' diff --git a/server/helpers/custom-validators/video-imports.ts b/server/helpers/custom-validators/video-imports.ts index f4235e2fa..8820c4c0a 100644 --- a/server/helpers/custom-validators/video-imports.ts +++ b/server/helpers/custom-validators/video-imports.ts @@ -1,4 +1,3 @@ -import 'express-validator' import 'multer' import * as validator from 'validator' import { CONSTRAINTS_FIELDS, MIMETYPES, VIDEO_IMPORT_STATES } from '../../initializers/constants' diff --git a/server/helpers/custom-validators/videos.ts b/server/helpers/custom-validators/videos.ts index 157e1a8e3..9ab1ef234 100644 --- a/server/helpers/custom-validators/videos.ts +++ b/server/helpers/custom-validators/videos.ts @@ -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 diff --git a/server/middlewares/oauth.ts b/server/middlewares/oauth.ts index 2b4e300e4..77fb305dd 100644 --- a/server/middlewares/oauth.ts +++ b/server/middlewares/oauth.ts @@ -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' diff --git a/server/middlewares/pagination.ts b/server/middlewares/pagination.ts index 83304940f..043869303 100644 --- a/server/middlewares/pagination.ts +++ b/server/middlewares/pagination.ts @@ -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) { diff --git a/server/middlewares/servers.ts b/server/middlewares/servers.ts index c52f4685b..9c0af443a 100644 --- a/server/middlewares/servers.ts +++ b/server/middlewares/servers.ts @@ -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) { diff --git a/server/middlewares/sort.ts b/server/middlewares/sort.ts index 6507aa5b8..8c27e8237 100644 --- a/server/middlewares/sort.ts +++ b/server/middlewares/sort.ts @@ -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) { diff --git a/server/middlewares/user-right.ts b/server/middlewares/user-right.ts index 498e3d677..4da7b9802 100644 --- a/server/middlewares/user-right.ts +++ b/server/middlewares/user-right.ts @@ -1,5 +1,4 @@ import * as express from 'express' -import 'express-validator' import { UserRight } from '../../shared' import { logger } from '../helpers/logger' diff --git a/server/middlewares/validators/account.ts b/server/middlewares/validators/account.ts index 67e4bf8cc..cbdcef2fd 100644 --- a/server/middlewares/validators/account.ts +++ b/server/middlewares/validators/account.ts @@ -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' diff --git a/server/middlewares/validators/activitypub/signature.ts b/server/middlewares/validators/activitypub/signature.ts index be14e92ea..02b191480 100644 --- a/server/middlewares/validators/activitypub/signature.ts +++ b/server/middlewares/validators/activitypub/signature.ts @@ -1,5 +1,5 @@ import * as express from 'express' -import { body } from 'express-validator/check' +import { body } from 'express-validator' import { isSignatureCreatorValid, isSignatureTypeValid, isSignatureValueValid diff --git a/server/middlewares/validators/avatar.ts b/server/middlewares/validators/avatar.ts index bab3ed118..8623d07e8 100644 --- a/server/middlewares/validators/avatar.ts +++ b/server/middlewares/validators/avatar.ts @@ -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' diff --git a/server/middlewares/validators/blocklist.ts b/server/middlewares/validators/blocklist.ts index 63d95e9e0..47a0b1a1c 100644 --- a/server/middlewares/validators/blocklist.ts +++ b/server/middlewares/validators/blocklist.ts @@ -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' diff --git a/server/middlewares/validators/config.ts b/server/middlewares/validators/config.ts index 9c43da165..5059ed0f2 100644 --- a/server/middlewares/validators/config.ts +++ b/server/middlewares/validators/config.ts @@ -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' diff --git a/server/middlewares/validators/feeds.ts b/server/middlewares/validators/feeds.ts index fa130121f..1bef9891b 100644 --- a/server/middlewares/validators/feeds.ts +++ b/server/middlewares/validators/feeds.ts @@ -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' diff --git a/server/middlewares/validators/follows.ts b/server/middlewares/validators/follows.ts index 2e5a02307..c3d772297 100644 --- a/server/middlewares/validators/follows.ts +++ b/server/middlewares/validators/follows.ts @@ -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' diff --git a/server/middlewares/validators/jobs.ts b/server/middlewares/validators/jobs.ts index 2f8b1738c..41a8d6899 100644 --- a/server/middlewares/validators/jobs.ts +++ b/server/middlewares/validators/jobs.ts @@ -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' diff --git a/server/middlewares/validators/logs.ts b/server/middlewares/validators/logs.ts index 7380c6edd..07f3f552f 100644 --- a/server/middlewares/validators/logs.ts +++ b/server/middlewares/validators/logs.ts @@ -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 = [ diff --git a/server/middlewares/validators/oembed.ts b/server/middlewares/validators/oembed.ts index 505319980..24ba5569d 100644 --- a/server/middlewares/validators/oembed.ts +++ b/server/middlewares/validators/oembed.ts @@ -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' diff --git a/server/middlewares/validators/pagination.ts b/server/middlewares/validators/pagination.ts index e1ed8cd65..80ae57c0b 100644 --- a/server/middlewares/validators/pagination.ts +++ b/server/middlewares/validators/pagination.ts @@ -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' diff --git a/server/middlewares/validators/plugins.ts b/server/middlewares/validators/plugins.ts index dc3f1454a..910d03c29 100644 --- a/server/middlewares/validators/plugins.ts +++ b/server/middlewares/validators/plugins.ts @@ -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) => { diff --git a/server/middlewares/validators/redundancy.ts b/server/middlewares/validators/redundancy.ts index edc53a6b2..1fdac0e4e 100644 --- a/server/middlewares/validators/redundancy.ts +++ b/server/middlewares/validators/redundancy.ts @@ -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) => { diff --git a/server/middlewares/validators/search.ts b/server/middlewares/validators/search.ts index 7816d229c..5a3c83f2c 100644 --- a/server/middlewares/validators/search.ts +++ b/server/middlewares/validators/search.ts @@ -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 = [ diff --git a/server/middlewares/validators/server.ts b/server/middlewares/validators/server.ts index 6eff8e9ee..f6812647b 100644 --- a/server/middlewares/validators/server.ts +++ b/server/middlewares/validators/server.ts @@ -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' diff --git a/server/middlewares/validators/themes.ts b/server/middlewares/validators/themes.ts index 642f2df78..24a9673f7 100644 --- a/server/middlewares/validators/themes.ts +++ b/server/middlewares/validators/themes.ts @@ -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' diff --git a/server/middlewares/validators/user-history.ts b/server/middlewares/validators/user-history.ts index 418313d09..2f1d3cc41 100644 --- a/server/middlewares/validators/user-history.ts +++ b/server/middlewares/validators/user-history.ts @@ -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' diff --git a/server/middlewares/validators/user-notifications.ts b/server/middlewares/validators/user-notifications.ts index 3ded8d8cf..308b32655 100644 --- a/server/middlewares/validators/user-notifications.ts +++ b/server/middlewares/validators/user-notifications.ts @@ -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) => { diff --git a/server/middlewares/validators/user-subscriptions.ts b/server/middlewares/validators/user-subscriptions.ts index 2356745d7..9bc8c87e7 100644 --- a/server/middlewares/validators/user-subscriptions.ts +++ b/server/middlewares/validators/user-subscriptions.ts @@ -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' diff --git a/server/middlewares/validators/users.ts b/server/middlewares/validators/users.ts index 7002de20d..db03dc231 100644 --- a/server/middlewares/validators/users.ts +++ b/server/middlewares/validators/users.ts @@ -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 }) diff --git a/server/middlewares/validators/utils.ts b/server/middlewares/validators/utils.ts index 8f77c9fbd..43e5652fa 100644 --- a/server/middlewares/validators/utils.ts +++ b/server/middlewares/validators/utils.ts @@ -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) { diff --git a/server/middlewares/validators/videos/video-abuses.ts b/server/middlewares/validators/videos/video-abuses.ts index e176e01af..e27d91bb1 100644 --- a/server/middlewares/validators/videos/video-abuses.ts +++ b/server/middlewares/validators/videos/video-abuses.ts @@ -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' diff --git a/server/middlewares/validators/videos/video-blacklist.ts b/server/middlewares/validators/videos/video-blacklist.ts index db59427c7..3e8c5b30c 100644 --- a/server/middlewares/validators/videos/video-blacklist.ts +++ b/server/middlewares/validators/videos/video-blacklist.ts @@ -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() diff --git a/server/middlewares/validators/videos/video-captions.ts b/server/middlewares/validators/videos/video-captions.ts index f8739e27f..f5610222a 100644 --- a/server/middlewares/validators/videos/video-captions.ts +++ b/server/middlewares/validators/videos/video-captions.ts @@ -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' diff --git a/server/middlewares/validators/videos/video-channels.ts b/server/middlewares/validators/videos/video-channels.ts index c1065b898..3ee5064fc 100644 --- a/server/middlewares/validators/videos/video-channels.ts +++ b/server/middlewares/validators/videos/video-channels.ts @@ -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, diff --git a/server/middlewares/validators/videos/video-comments.ts b/server/middlewares/validators/videos/video-comments.ts index 1e3e42833..83a0c24b0 100644 --- a/server/middlewares/validators/videos/video-comments.ts +++ b/server/middlewares/validators/videos/video-comments.ts @@ -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' diff --git a/server/middlewares/validators/videos/video-imports.ts b/server/middlewares/validators/videos/video-imports.ts index 8b0dd8960..318dad100 100644 --- a/server/middlewares/validators/videos/video-imports.ts +++ b/server/middlewares/validators/videos/video-imports.ts @@ -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() diff --git a/server/middlewares/validators/videos/video-playlists.ts b/server/middlewares/validators/videos/video-playlists.ts index 638122a2e..2e9c8aa33 100644 --- a/server/middlewares/validators/videos/video-playlists.ts +++ b/server/middlewares/validators/videos/video-playlists.ts @@ -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)[] } diff --git a/server/middlewares/validators/videos/video-rates.ts b/server/middlewares/validators/videos/video-rates.ts index 5bb3f4a51..4021cfecc 100644 --- a/server/middlewares/validators/videos/video-rates.ts +++ b/server/middlewares/validators/videos/video-rates.ts @@ -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' diff --git a/server/middlewares/validators/videos/video-shares.ts b/server/middlewares/validators/videos/video-shares.ts index 6f4a1f3e0..ace62be5c 100644 --- a/server/middlewares/validators/videos/video-shares.ts +++ b/server/middlewares/validators/videos/video-shares.ts @@ -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' diff --git a/server/middlewares/validators/videos/video-watch.ts b/server/middlewares/validators/videos/video-watch.ts index a0b530c75..d6ca1d341 100644 --- a/server/middlewares/validators/videos/video-watch.ts +++ b/server/middlewares/validators/videos/video-watch.ts @@ -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) => { diff --git a/server/middlewares/validators/videos/videos.ts b/server/middlewares/validators/videos/videos.ts index 8f5e5c95c..27dfe91ca 100644 --- a/server/middlewares/validators/videos/videos.ts +++ b/server/middlewares/validators/videos/videos.ts @@ -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)[] } diff --git a/server/middlewares/validators/webfinger.ts b/server/middlewares/validators/webfinger.ts index 63a1678ec..d7cfe17f0 100644 --- a/server/middlewares/validators/webfinger.ts +++ b/server/middlewares/validators/webfinger.ts @@ -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' diff --git a/server/tests/api/check-params/video-imports.ts b/server/tests/api/check-params/video-imports.ts index 8ff115e7b..231d5cc85 100644 --- a/server/tests/api/check-params/video-imports.ts +++ b/server/tests/api/check-params/video-imports.ts @@ -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 } })