1
0
Fork 0

Fix express validator

This commit is contained in:
Chocobozzz 2019-07-25 16:23:44 +02:00
parent b4c19345c1
commit c8861d5dc0
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
51 changed files with 93 additions and 101 deletions

View File

@ -39,7 +39,7 @@ export class InfiniteScrollerDirective implements OnInit, OnDestroy {
const scrollObservable = fromEvent(this.container || window, 'scroll') const scrollObservable = fromEvent(this.container || window, 'scroll')
.pipe( .pipe(
startWith(null), startWith(null as string), // FIXME: typings
throttleTime(200, undefined, throttleOptions), throttleTime(200, undefined, throttleOptions),
map(() => this.getScrollInfo()), map(() => this.getScrollInfo()),
distinctUntilChanged((o1, o2) => o1.current === o2.current), distinctUntilChanged((o1, o2) => o1.current === o2.current),

View File

@ -31,7 +31,7 @@
<div class="video-info-privacy"> <div class="video-info-privacy">
<ng-container *ngIf="displayOptions.privacyText">{{ video.privacy.label }}</ng-container> <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> <ng-container *ngIf="displayOptions.state">{{ getStateLabel(video) }}</ng-container>
</div> </div>

View File

@ -255,10 +255,10 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
) )
// Video did change // Video did change
forkJoin( forkJoin([
videoObs, videoObs,
this.videoCaptionService.listCaptions(videoId) this.videoCaptionService.listCaptions(videoId)
) ])
.pipe( .pipe(
// If 401, the video is private or blacklisted so redirect to 404 // If 401, the video is private or blacklisted so redirect to 404
catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ])) catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ]))

View File

@ -1,4 +1,3 @@
import 'express-validator'
import { isUserDescriptionValid, isUserUsernameValid } from './users' import { isUserDescriptionValid, isUserUsernameValid } from './users'
import { exists } from './misc' import { exists } from './misc'

View File

@ -1,6 +1,7 @@
import 'multer' import 'multer'
import * as validator from 'validator' import * as validator from 'validator'
import { sep } from 'path' import { sep } from 'path'
import toBoolean = require('validator/lib/toBoolean')
function exists (value: any) { function exists (value: any) {
return value !== undefined && value !== null return value !== undefined && value !== null
@ -46,9 +47,21 @@ function isBooleanValid (value: any) {
} }
function toIntOrNull (value: string) { 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) { function toValueOrNull (value: string) {
@ -110,6 +123,7 @@ export {
isIdOrUUIDValid, isIdOrUUIDValid,
isDateValid, isDateValid,
toValueOrNull, toValueOrNull,
toBooleanOrNull,
isBooleanValid, isBooleanValid,
toIntOrNull, toIntOrNull,
toArray, toArray,

View File

@ -1,6 +1,4 @@
import * as validator from 'validator' import * as validator from 'validator'
import 'express-validator'
import { isArray } from './misc' import { isArray } from './misc'
function isNumberArray (value: any) { function isNumberArray (value: any) {

View File

@ -1,7 +1,5 @@
import * as validator from 'validator' import * as validator from 'validator'
import 'express-validator' import { exists, isArray } from './misc'
import { isArray, exists } from './misc'
import { isTestInstance } from '../core-utils' import { isTestInstance } from '../core-utils'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { CONSTRAINTS_FIELDS } from '../../initializers/constants'

View File

@ -1,4 +1,3 @@
import 'express-validator'
import * as validator from 'validator' import * as validator from 'validator'
import { UserRole } from '../../../shared' import { UserRole } from '../../../shared'
import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants' import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'

View File

@ -1,5 +1,3 @@
import 'express-validator'
import 'multer'
import * as validator from 'validator' import * as validator from 'validator'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
import { exists } from './misc' import { exists } from './misc'

View File

@ -1,4 +1,3 @@
import 'express-validator'
import 'multer' import 'multer'
import * as validator from 'validator' import * as validator from 'validator'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { CONSTRAINTS_FIELDS } from '../../initializers/constants'

View File

@ -1,4 +1,3 @@
import 'express-validator'
import 'multer' import 'multer'
import * as validator from 'validator' import * as validator from 'validator'
import { CONSTRAINTS_FIELDS, MIMETYPES, VIDEO_IMPORT_STATES } from '../../initializers/constants' import { CONSTRAINTS_FIELDS, MIMETYPES, VIDEO_IMPORT_STATES } from '../../initializers/constants'

View File

@ -1,9 +1,6 @@
import { Response } from 'express'
import 'express-validator'
import { values } from 'lodash' import { values } from 'lodash'
import 'multer'
import * as validator from 'validator' import * as validator from 'validator'
import { UserRight, VideoFilter, VideoPrivacy, VideoRateType } from '../../../shared' import { VideoFilter, VideoPrivacy, VideoRateType } from '../../../shared'
import { import {
CONSTRAINTS_FIELDS, CONSTRAINTS_FIELDS,
MIMETYPES, MIMETYPES,
@ -13,9 +10,7 @@ import {
VIDEO_RATE_TYPES, VIDEO_RATE_TYPES,
VIDEO_STATES VIDEO_STATES
} from '../../initializers/constants' } from '../../initializers/constants'
import { VideoModel } from '../../models/video/video'
import { exists, isArray, isDateValid, isFileValid } from './misc' import { exists, isArray, isDateValid, isFileValid } from './misc'
import { UserModel } from '../../models/account/user'
import * as magnetUtil from 'magnet-uri' import * as magnetUtil from 'magnet-uri'
const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS

View File

@ -1,6 +1,5 @@
import * as express from 'express' import * as express from 'express'
import * as OAuthServer from 'express-oauth-server' import * as OAuthServer from 'express-oauth-server'
import 'express-validator'
import { OAUTH_LIFETIME } from '../initializers/constants' import { OAUTH_LIFETIME } from '../initializers/constants'
import { logger } from '../helpers/logger' import { logger } from '../helpers/logger'
import { Socket } from 'socket.io' import { Socket } from 'socket.io'

View File

@ -1,6 +1,4 @@
import 'express-validator'
import * as express from 'express' import * as express from 'express'
import { PAGINATION } from '../initializers/constants' import { PAGINATION } from '../initializers/constants'
function setDefaultPagination (req: express.Request, res: express.Response, next: express.NextFunction) { function setDefaultPagination (req: express.Request, res: express.Response, next: express.NextFunction) {

View File

@ -1,5 +1,4 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator'
import { getHostWithPort } from '../helpers/express-utils' import { getHostWithPort } from '../helpers/express-utils'
function setBodyHostsPort (req: express.Request, res: express.Response, next: express.NextFunction) { function setBodyHostsPort (req: express.Request, res: express.Response, next: express.NextFunction) {

View File

@ -1,5 +1,4 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator'
import { SortType } from '../models/utils' import { SortType } from '../models/utils'
function setDefaultSort (req: express.Request, res: express.Response, next: express.NextFunction) { function setDefaultSort (req: express.Request, res: express.Response, next: express.NextFunction) {

View File

@ -1,5 +1,4 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator'
import { UserRight } from '../../shared' import { UserRight } from '../../shared'
import { logger } from '../helpers/logger' import { logger } from '../helpers/logger'

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { param } from 'express-validator/check' import { param } from 'express-validator'
import { isAccountNameValid } from '../../helpers/custom-validators/accounts' import { isAccountNameValid } from '../../helpers/custom-validators/accounts'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { body } from 'express-validator/check' import { body } from 'express-validator'
import { import {
isSignatureCreatorValid, isSignatureTypeValid, isSignatureCreatorValid, isSignatureTypeValid,
isSignatureValueValid isSignatureValueValid

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { body } from 'express-validator/check' import { body } from 'express-validator'
import { isAvatarFile } from '../../helpers/custom-validators/users' import { isAvatarFile } from '../../helpers/custom-validators/users'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { CONSTRAINTS_FIELDS } from '../../initializers/constants'

View File

@ -1,4 +1,4 @@
import { body, param } from 'express-validator/check' import { body, param } from 'express-validator'
import * as express from 'express' import * as express from 'express'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'

View File

@ -1,5 +1,5 @@
import * as express from 'express' 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 { isUserNSFWPolicyValid, isUserVideoQuotaDailyValid, isUserVideoQuotaValid } from '../../helpers/custom-validators/users'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { CustomConfig } from '../../../shared/models/server/custom-config.model' import { CustomConfig } from '../../../shared/models/server/custom-config.model'

View File

@ -1,5 +1,5 @@
import * as express from 'express' 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 { isIdOrUUIDValid, isIdValid } from '../../helpers/custom-validators/misc'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'

View File

@ -1,5 +1,5 @@
import * as express from 'express' 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 { isTestInstance } from '../../helpers/core-utils'
import { isEachUniqueHostValid, isHostValid } from '../../helpers/custom-validators/servers' import { isEachUniqueHostValid, isHostValid } from '../../helpers/custom-validators/servers'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { param } from 'express-validator/check' import { param } from 'express-validator'
import { isValidJobState } from '../../helpers/custom-validators/jobs' import { isValidJobState } from '../../helpers/custom-validators/jobs'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'

View File

@ -2,7 +2,7 @@ import * as express from 'express'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { isDateValid } from '../../helpers/custom-validators/misc' 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' import { isValidLogLevel } from '../../helpers/custom-validators/logs'
const getLogsValidator = [ const getLogsValidator = [

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { query } from 'express-validator/check' import { query } from 'express-validator'
import { join } from 'path' import { join } from 'path'
import { isTestInstance } from '../../helpers/core-utils' import { isTestInstance } from '../../helpers/core-utils'
import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc' import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc'

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { query } from 'express-validator/check' import { query } from 'express-validator'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'

View File

@ -1,10 +1,10 @@
import * as express from 'express' 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 { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { isNpmPluginNameValid, isPluginNameValid, isPluginTypeValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins' import { isNpmPluginNameValid, isPluginNameValid, isPluginTypeValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins'
import { PluginManager } from '../../lib/plugins/plugin-manager' 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 { PluginModel } from '../../models/server/plugin'
import { InstallOrUpdatePlugin } from '../../../shared/models/plugins/install-plugin.model' import { InstallOrUpdatePlugin } from '../../../shared/models/plugins/install-plugin.model'
import { PluginType } from '../../../shared/models/plugins/plugin.type' import { PluginType } from '../../../shared/models/plugins/plugin.type'
@ -39,7 +39,7 @@ const listPluginsValidator = [
.custom(isPluginTypeValid).withMessage('Should have a valid plugin type'), .custom(isPluginTypeValid).withMessage('Should have a valid plugin type'),
query('uninstalled') query('uninstalled')
.optional() .optional()
.toBoolean() .customSanitizer(toBooleanOrNull)
.custom(isBooleanValid).withMessage('Should have a valid uninstalled attribute'), .custom(isBooleanValid).withMessage('Should have a valid uninstalled attribute'),
(req: express.Request, res: express.Response, next: express.NextFunction) => { (req: express.Request, res: express.Response, next: express.NextFunction) => {

View File

@ -1,7 +1,6 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body, param } from 'express-validator'
import { body, param } from 'express-validator/check' import { exists, isBooleanValid, isIdOrUUIDValid, toBooleanOrNull, toIntOrNull } from '../../helpers/custom-validators/misc'
import { exists, isBooleanValid, isIdOrUUIDValid, toIntOrNull } from '../../helpers/custom-validators/misc'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy' import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy'
@ -68,7 +67,7 @@ const videoPlaylistRedundancyGetValidator = [
const updateServerRedundancyValidator = [ const updateServerRedundancyValidator = [
param('host').custom(isHostValid).withMessage('Should have a valid host'), param('host').custom(isHostValid).withMessage('Should have a valid host'),
body('redundancyAllowed') body('redundancyAllowed')
.toBoolean() .customSanitizer(toBooleanOrNull)
.custom(isBooleanValid).withMessage('Should have a valid redundancyAllowed attribute'), .custom(isBooleanValid).withMessage('Should have a valid redundancyAllowed attribute'),
async (req: express.Request, res: express.Response, next: express.NextFunction) => { async (req: express.Request, res: express.Response, next: express.NextFunction) => {

View File

@ -1,7 +1,7 @@
import * as express from 'express' import * as express from 'express'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { query } from 'express-validator/check' import { query } from 'express-validator'
import { isDateValid } from '../../helpers/custom-validators/misc' import { isDateValid } from '../../helpers/custom-validators/misc'
const videosSearchValidator = [ const videosSearchValidator = [

View File

@ -3,7 +3,7 @@ import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { isHostValid, isValidContactBody } from '../../helpers/custom-validators/servers' import { isHostValid, isValidContactBody } from '../../helpers/custom-validators/servers'
import { ServerModel } from '../../models/server/server' 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 { isUserDisplayNameValid } from '../../helpers/custom-validators/users'
import { Emailer } from '../../lib/emailer' import { Emailer } from '../../lib/emailer'
import { Redis } from '../../lib/redis' import { Redis } from '../../lib/redis'

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { param } from 'express-validator/check' import { param } from 'express-validator'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { isPluginNameValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins' import { isPluginNameValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins'

View File

@ -1,6 +1,5 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body } from 'express-validator'
import { body } from 'express-validator/check'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { isDateValid } from '../../helpers/custom-validators/misc' import { isDateValid } from '../../helpers/custom-validators/misc'

View File

@ -1,15 +1,14 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body, query } from 'express-validator'
import { body, query } from 'express-validator/check'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { isUserNotificationSettingValid } from '../../helpers/custom-validators/user-notifications' 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 = [ const listUserNotificationsValidator = [
query('unread') query('unread')
.optional() .optional()
.toBoolean() .customSanitizer(toBooleanOrNull)
.isBoolean().withMessage('Should have a valid unread boolean'), .isBoolean().withMessage('Should have a valid unread boolean'),
(req: express.Request, res: express.Response, next: express.NextFunction) => { (req: express.Request, res: express.Response, next: express.NextFunction) => {

View File

@ -1,6 +1,5 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body, param, query } from 'express-validator'
import { body, param, query } from 'express-validator/check'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils' import { areValidationErrors } from './utils'
import { ActorFollowModel } from '../../models/activitypub/actor-follow' import { ActorFollowModel } from '../../models/activitypub/actor-follow'

View File

@ -1,9 +1,8 @@
import * as Bluebird from 'bluebird' import * as Bluebird from 'bluebird'
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body, param } from 'express-validator'
import { body, param } from 'express-validator/check'
import { omit } from 'lodash' import { omit } from 'lodash'
import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc' import { isIdOrUUIDValid, toIntOrNull } from '../../helpers/custom-validators/misc'
import { import {
isUserAdminFlagsValid, isUserAdminFlagsValid,
isUserAutoPlayVideoValid, isUserAutoPlayVideoValid,
@ -358,7 +357,7 @@ const usersVerifyEmailValidator = [
.not().isEmpty().withMessage('Should have a valid verification string'), .not().isEmpty().withMessage('Should have a valid verification string'),
body('isPendingEmail') body('isPendingEmail')
.optional() .optional()
.toBoolean(), .customSanitizer(toIntOrNull),
async (req: express.Request, res: express.Response, next: express.NextFunction) => { async (req: express.Request, res: express.Response, next: express.NextFunction) => {
logger.debug('Checking usersVerifyEmail parameters', { parameters: req.params }) logger.debug('Checking usersVerifyEmail parameters', { parameters: req.params })

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { query, validationResult } from 'express-validator/check' import { query, validationResult } from 'express-validator'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
function areValidationErrors (req: express.Request, res: express.Response) { function areValidationErrors (req: express.Request, res: express.Response) {

View File

@ -1,6 +1,5 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body, param } from 'express-validator'
import { body, param } from 'express-validator/check'
import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc' import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc'
import { logger } from '../../../helpers/logger' import { logger } from '../../../helpers/logger'
import { areValidationErrors } from '../utils' import { areValidationErrors } from '../utils'

View File

@ -1,6 +1,6 @@
import * as express from 'express' import * as express from 'express'
import { body, param, query } from 'express-validator/check' import { body, param, query } from 'express-validator'
import { isBooleanValid, isIdOrUUIDValid } from '../../../helpers/custom-validators/misc' import { isBooleanValid, isIdOrUUIDValid, toBooleanOrNull } from '../../../helpers/custom-validators/misc'
import { logger } from '../../../helpers/logger' import { logger } from '../../../helpers/logger'
import { areValidationErrors } from '../utils' import { areValidationErrors } from '../utils'
import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../../helpers/custom-validators/video-blacklist' 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'), param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid videoId'),
body('unfederate') body('unfederate')
.optional() .optional()
.toBoolean() .customSanitizer(toBooleanOrNull)
.custom(isBooleanValid).withMessage('Should have a valid unfederate boolean'), .custom(isBooleanValid).withMessage('Should have a valid unfederate boolean'),
body('reason') body('reason')
.optional() .optional()

View File

@ -1,7 +1,7 @@
import * as express from 'express' import * as express from 'express'
import { areValidationErrors } from '../utils' import { areValidationErrors } from '../utils'
import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc' 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 { CONSTRAINTS_FIELDS } from '../../../initializers/constants'
import { UserRight } from '../../../../shared' import { UserRight } from '../../../../shared'
import { logger } from '../../../helpers/logger' import { logger } from '../../../helpers/logger'

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { body, param } from 'express-validator/check' import { body, param } from 'express-validator'
import { UserRight } from '../../../../shared' import { UserRight } from '../../../../shared'
import { import {
isVideoChannelDescriptionValid, isVideoChannelDescriptionValid,

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { body, param } from 'express-validator/check' import { body, param } from 'express-validator'
import { UserRight } from '../../../../shared' import { UserRight } from '../../../../shared'
import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc' import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc'
import { isValidVideoCommentText } from '../../../helpers/custom-validators/video-comments' import { isValidVideoCommentText } from '../../../helpers/custom-validators/video-comments'

View File

@ -1,6 +1,6 @@
import * as express from 'express' import * as express from 'express'
import { body } from 'express-validator/check' import { body } from 'express-validator'
import { isIdValid } from '../../../helpers/custom-validators/misc' import { isIdValid, toIntOrNull } from '../../../helpers/custom-validators/misc'
import { logger } from '../../../helpers/logger' import { logger } from '../../../helpers/logger'
import { areValidationErrors } from '../utils' import { areValidationErrors } from '../utils'
import { getCommonVideoEditAttributes } from './videos' import { getCommonVideoEditAttributes } from './videos'
@ -13,7 +13,7 @@ import { doesVideoChannelOfAccountExist } from '../../../helpers/middlewares'
const videoImportAddValidator = getCommonVideoEditAttributes().concat([ const videoImportAddValidator = getCommonVideoEditAttributes().concat([
body('channelId') body('channelId')
.toInt() .customSanitizer(toIntOrNull)
.custom(isIdValid).withMessage('Should have correct video channel id'), .custom(isIdValid).withMessage('Should have correct video channel id'),
body('targetUrl') body('targetUrl')
.optional() .optional()

View File

@ -1,12 +1,20 @@
import * as express from 'express' 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 { UserRight, VideoPlaylistCreate, VideoPlaylistUpdate } from '../../../../shared'
import { logger } from '../../../helpers/logger' import { logger } from '../../../helpers/logger'
import { UserModel } from '../../../models/account/user' import { UserModel } from '../../../models/account/user'
import { areValidationErrors } from '../utils' import { areValidationErrors } from '../utils'
import { isVideoImage } from '../../../helpers/custom-validators/videos' import { isVideoImage } from '../../../helpers/custom-validators/videos'
import { CONSTRAINTS_FIELDS } from '../../../initializers/constants' 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 { import {
isVideoPlaylistDescriptionValid, isVideoPlaylistDescriptionValid,
isVideoPlaylistNameValid, isVideoPlaylistNameValid,
@ -374,12 +382,11 @@ function getCommonPlaylistEditAttributes () {
.custom(isVideoPlaylistDescriptionValid).withMessage('Should have a valid description'), .custom(isVideoPlaylistDescriptionValid).withMessage('Should have a valid description'),
body('privacy') body('privacy')
.optional() .optional()
.toInt() .customSanitizer(toIntOrNull)
.custom(isVideoPlaylistPrivacyValid).withMessage('Should have correct playlist privacy'), .custom(isVideoPlaylistPrivacyValid).withMessage('Should have correct playlist privacy'),
body('videoChannelId') body('videoChannelId')
.optional() .optional()
.customSanitizer(toValueOrNull) .customSanitizer(toIntOrNull)
.toInt()
] as (ValidationChain | express.Handler)[] ] as (ValidationChain | express.Handler)[]
} }

View File

@ -1,6 +1,5 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body, param, query } from 'express-validator'
import { body, param, query } from 'express-validator/check'
import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc' import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
import { isRatingValid } from '../../../helpers/custom-validators/video-rates' import { isRatingValid } from '../../../helpers/custom-validators/video-rates'
import { isVideoRatingTypeValid } from '../../../helpers/custom-validators/videos' import { isVideoRatingTypeValid } from '../../../helpers/custom-validators/videos'

View File

@ -1,6 +1,5 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { param } from 'express-validator'
import { param } from 'express-validator/check'
import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc' import { isIdOrUUIDValid, isIdValid } from '../../../helpers/custom-validators/misc'
import { logger } from '../../../helpers/logger' import { logger } from '../../../helpers/logger'
import { VideoShareModel } from '../../../models/video/video-share' import { VideoShareModel } from '../../../models/video/video-share'

View File

@ -1,6 +1,6 @@
import { body, param } from 'express-validator/check' import { body, param } from 'express-validator'
import * as express from 'express' 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 { areValidationErrors } from '../utils'
import { logger } from '../../../helpers/logger' import { logger } from '../../../helpers/logger'
import { doesVideoExist } from '../../../helpers/middlewares' import { doesVideoExist } from '../../../helpers/middlewares'
@ -8,7 +8,7 @@ import { doesVideoExist } from '../../../helpers/middlewares'
const videoWatchingValidator = [ const videoWatchingValidator = [
param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'),
body('currentTime') body('currentTime')
.toInt() .customSanitizer(toIntOrNull)
.isInt().withMessage('Should have correct current time'), .isInt().withMessage('Should have correct current time'),
async (req: express.Request, res: express.Response, next: express.NextFunction) => { async (req: express.Request, res: express.Response, next: express.NextFunction) => {

View File

@ -1,6 +1,5 @@
import * as express from 'express' import * as express from 'express'
import 'express-validator' import { body, param, query, ValidationChain } from 'express-validator'
import { body, param, query, ValidationChain } from 'express-validator/check'
import { UserRight, VideoChangeOwnershipStatus, VideoPrivacy } from '../../../../shared' import { UserRight, VideoChangeOwnershipStatus, VideoPrivacy } from '../../../../shared'
import { import {
isBooleanValid, isBooleanValid,
@ -9,6 +8,7 @@ import {
isIdValid, isIdValid,
isUUIDValid, isUUIDValid,
toArray, toArray,
toBooleanOrNull,
toIntOrNull, toIntOrNull,
toValueOrNull toValueOrNull
} from '../../../helpers/custom-validators/misc' } from '../../../helpers/custom-validators/misc'
@ -53,7 +53,7 @@ const videosAddValidator = getCommonVideoEditAttributes().concat([
), ),
body('name').custom(isVideoNameValid).withMessage('Should have a valid name'), body('name').custom(isVideoNameValid).withMessage('Should have a valid name'),
body('channelId') body('channelId')
.toInt() .customSanitizer(toIntOrNull)
.custom(isIdValid).withMessage('Should have correct video channel id'), .custom(isIdValid).withMessage('Should have correct video channel id'),
async (req: express.Request, res: express.Response, next: express.NextFunction) => { 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'), .custom(isVideoNameValid).withMessage('Should have a valid name'),
body('channelId') body('channelId')
.optional() .optional()
.toInt() .customSanitizer(toIntOrNull)
.custom(isIdValid).withMessage('Should have correct video channel id'), .custom(isIdValid).withMessage('Should have correct video channel id'),
async (req: express.Request, res: express.Response, next: express.NextFunction) => { async (req: express.Request, res: express.Response, next: express.NextFunction) => {
@ -307,15 +307,15 @@ function getCommonVideoEditAttributes () {
.custom(isVideoLanguageValid).withMessage('Should have a valid language'), .custom(isVideoLanguageValid).withMessage('Should have a valid language'),
body('nsfw') body('nsfw')
.optional() .optional()
.toBoolean() .customSanitizer(toBooleanOrNull)
.custom(isBooleanValid).withMessage('Should have a valid NSFW attribute'), .custom(isBooleanValid).withMessage('Should have a valid NSFW attribute'),
body('waitTranscoding') body('waitTranscoding')
.optional() .optional()
.toBoolean() .customSanitizer(toBooleanOrNull)
.custom(isBooleanValid).withMessage('Should have a valid wait transcoding attribute'), .custom(isBooleanValid).withMessage('Should have a valid wait transcoding attribute'),
body('privacy') body('privacy')
.optional() .optional()
.toInt() .customSanitizer(toValueOrNull)
.custom(isVideoPrivacyValid).withMessage('Should have correct video privacy'), .custom(isVideoPrivacyValid).withMessage('Should have correct video privacy'),
body('description') body('description')
.optional() .optional()
@ -331,16 +331,16 @@ function getCommonVideoEditAttributes () {
.custom(isVideoTagsValid).withMessage('Should have correct tags'), .custom(isVideoTagsValid).withMessage('Should have correct tags'),
body('commentsEnabled') body('commentsEnabled')
.optional() .optional()
.toBoolean() .customSanitizer(toBooleanOrNull)
.custom(isBooleanValid).withMessage('Should have comments enabled boolean'), .custom(isBooleanValid).withMessage('Should have comments enabled boolean'),
body('downloadEnabled') body('downloadEnabled')
.optional() .optional()
.toBoolean() .customSanitizer(toBooleanOrNull)
.custom(isBooleanValid).withMessage('Should have downloading enabled boolean'), .custom(isBooleanValid).withMessage('Should have downloading enabled boolean'),
body('originallyPublishedAt') body('originallyPublishedAt')
.optional() .optional()
.customSanitizer(toValueOrNull) .customSanitizer(toValueOrNull)
.custom(isVideoOriginallyPublishedAtValid).withMessage('Should have a valid original publication date'), .custom(isVideoOriginallyPublishedAtValid).withMessage('Should have a valid original publication date'),
body('scheduleUpdate') body('scheduleUpdate')
.optional() .optional()
.customSanitizer(toValueOrNull), .customSanitizer(toValueOrNull),
@ -349,7 +349,7 @@ function getCommonVideoEditAttributes () {
.custom(isDateValid).withMessage('Should have a valid schedule update date'), .custom(isDateValid).withMessage('Should have a valid schedule update date'),
body('scheduleUpdate.privacy') body('scheduleUpdate.privacy')
.optional() .optional()
.toInt() .customSanitizer(toValueOrNull)
.custom(isScheduleVideoUpdatePrivacyValid).withMessage('Should have correct schedule update privacy') .custom(isScheduleVideoUpdatePrivacyValid).withMessage('Should have correct schedule update privacy')
] as (ValidationChain | express.Handler)[] ] as (ValidationChain | express.Handler)[]
} }

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { query } from 'express-validator/check' import { query } from 'express-validator'
import { isWebfingerLocalResourceValid } from '../../helpers/custom-validators/webfinger' import { isWebfingerLocalResourceValid } from '../../helpers/custom-validators/webfinger'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { ActorModel } from '../../models/activitypub/actor' import { ActorModel } from '../../models/activitypub/actor'

View File

@ -91,7 +91,7 @@ describe('Test video imports API validator', function () {
support: 'my super support text', support: 'my super support text',
tags: [ 'tag1', 'tag2' ], tags: [ 'tag1', 'tag2' ],
privacy: VideoPrivacy.PUBLIC, privacy: VideoPrivacy.PUBLIC,
channelId: channelId channelId
} }
}) })