2018-07-12 12:02:00 -05:00
import * as express from 'express'
2018-10-05 04:15:06 -05:00
import { areValidationErrors } from '../utils'
import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
2019-07-25 09:23:44 -05:00
import { body , param } from 'express-validator'
2020-01-09 07:10:23 -06:00
import { CONSTRAINTS_FIELDS , MIMETYPES } from '../../../initializers/constants'
2018-10-05 04:15:06 -05:00
import { UserRight } from '../../../../shared'
import { logger } from '../../../helpers/logger'
2019-07-23 03:40:39 -05:00
import { isVideoCaptionFile , isVideoCaptionLanguageValid } from '../../../helpers/custom-validators/video-captions'
2018-10-05 04:15:06 -05:00
import { cleanUpReqFiles } from '../../../helpers/express-utils'
2019-07-23 03:40:39 -05:00
import { checkUserCanManageVideo , doesVideoCaptionExist , doesVideoExist } from '../../../helpers/middlewares'
2018-07-12 12:02:00 -05:00
const addVideoCaptionValidator = [
param ( 'videoId' ) . custom ( isIdOrUUIDValid ) . not ( ) . isEmpty ( ) . withMessage ( 'Should have a valid video id' ) ,
param ( 'captionLanguage' ) . custom ( isVideoCaptionLanguageValid ) . not ( ) . isEmpty ( ) . withMessage ( 'Should have a valid caption language' ) ,
body ( 'captionfile' )
2020-01-09 07:10:23 -06:00
. custom ( ( _ , { req } ) = > isVideoCaptionFile ( req . files , 'captionfile' ) ) . withMessage (
` This caption file is not supported or too large. Please, make sure it is under ${ CONSTRAINTS_FIELDS . VIDEO_CAPTIONS . CAPTION_FILE . FILE_SIZE } and one of the following mimetypes: `
+ Object . keys ( MIMETYPES . VIDEO_CAPTIONS . MIMETYPE_EXT ) . map ( key = > ` ${ key } ( ${ MIMETYPES . VIDEO_CAPTIONS . MIMETYPE_EXT [ key ] } ) ` ) . join ( ', ' )
2018-07-12 12:02:00 -05:00
) ,
async ( req : express.Request , res : express.Response , next : express.NextFunction ) = > {
logger . debug ( 'Checking addVideoCaption parameters' , { parameters : req.body } )
2018-07-31 08:09:34 -05:00
if ( areValidationErrors ( req , res ) ) return cleanUpReqFiles ( req )
2019-03-19 03:26:50 -05:00
if ( ! await doesVideoExist ( req . params . videoId , res ) ) return cleanUpReqFiles ( req )
2018-07-12 12:02:00 -05:00
// Check if the user who did the request is able to update the video
const user = res . locals . oauth . token . User
2019-08-15 04:53:26 -05:00
if ( ! checkUserCanManageVideo ( user , res . locals . videoAll , UserRight . UPDATE_ANY_VIDEO , res ) ) return cleanUpReqFiles ( req )
2018-07-12 12:02:00 -05:00
return next ( )
}
]
const deleteVideoCaptionValidator = [
param ( 'videoId' ) . custom ( isIdOrUUIDValid ) . not ( ) . isEmpty ( ) . withMessage ( 'Should have a valid video id' ) ,
param ( 'captionLanguage' ) . custom ( isVideoCaptionLanguageValid ) . not ( ) . isEmpty ( ) . withMessage ( 'Should have a valid caption language' ) ,
async ( req : express.Request , res : express.Response , next : express.NextFunction ) = > {
logger . debug ( 'Checking deleteVideoCaption parameters' , { parameters : req.params } )
if ( areValidationErrors ( req , res ) ) return
2019-03-19 03:26:50 -05:00
if ( ! await doesVideoExist ( req . params . videoId , res ) ) return
2019-08-15 04:53:26 -05:00
if ( ! await doesVideoCaptionExist ( res . locals . videoAll , req . params . captionLanguage , res ) ) return
2018-07-12 12:02:00 -05:00
// Check if the user who did the request is able to update the video
const user = res . locals . oauth . token . User
2019-08-15 04:53:26 -05:00
if ( ! checkUserCanManageVideo ( user , res . locals . videoAll , UserRight . UPDATE_ANY_VIDEO , res ) ) return
2018-07-12 12:02:00 -05:00
return next ( )
}
]
const listVideoCaptionsValidator = [
param ( 'videoId' ) . custom ( isIdOrUUIDValid ) . not ( ) . isEmpty ( ) . withMessage ( 'Should have a valid video id' ) ,
async ( req : express.Request , res : express.Response , next : express.NextFunction ) = > {
logger . debug ( 'Checking listVideoCaptions parameters' , { parameters : req.params } )
if ( areValidationErrors ( req , res ) ) return
2019-03-19 03:26:50 -05:00
if ( ! await doesVideoExist ( req . params . videoId , res , 'id' ) ) return
2018-07-12 12:02:00 -05:00
return next ( )
}
]
export {
addVideoCaptionValidator ,
listVideoCaptionsValidator ,
deleteVideoCaptionValidator
}