2018-07-12 13:02:00 -04:00
import * as express from 'express'
2018-10-05 05:15:06 -04:00
import { areValidationErrors } from '../utils'
import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
2019-07-25 10:23:44 -04:00
import { body , param } from 'express-validator'
2020-01-09 08:10:23 -05:00
import { CONSTRAINTS_FIELDS , MIMETYPES } from '../../../initializers/constants'
2018-10-05 05:15:06 -04:00
import { UserRight } from '../../../../shared'
import { logger } from '../../../helpers/logger'
2019-07-23 04:40:39 -04:00
import { isVideoCaptionFile , isVideoCaptionLanguageValid } from '../../../helpers/custom-validators/video-captions'
2018-10-05 05:15:06 -04:00
import { cleanUpReqFiles } from '../../../helpers/express-utils'
2019-07-23 04:40:39 -04:00
import { checkUserCanManageVideo , doesVideoCaptionExist , doesVideoExist } from '../../../helpers/middlewares'
2018-07-12 13:02:00 -04: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 08:10:23 -05: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 13:02:00 -04:00
) ,
async ( req : express.Request , res : express.Response , next : express.NextFunction ) = > {
logger . debug ( 'Checking addVideoCaption parameters' , { parameters : req.body } )
2018-07-31 09:09:34 -04:00
if ( areValidationErrors ( req , res ) ) return cleanUpReqFiles ( req )
2019-03-19 04:26:50 -04:00
if ( ! await doesVideoExist ( req . params . videoId , res ) ) return cleanUpReqFiles ( req )
2018-07-12 13:02:00 -04: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 05:53:26 -04:00
if ( ! checkUserCanManageVideo ( user , res . locals . videoAll , UserRight . UPDATE_ANY_VIDEO , res ) ) return cleanUpReqFiles ( req )
2018-07-12 13:02:00 -04: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 04:26:50 -04:00
if ( ! await doesVideoExist ( req . params . videoId , res ) ) return
2019-08-15 05:53:26 -04:00
if ( ! await doesVideoCaptionExist ( res . locals . videoAll , req . params . captionLanguage , res ) ) return
2018-07-12 13:02:00 -04: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 05:53:26 -04:00
if ( ! checkUserCanManageVideo ( user , res . locals . videoAll , UserRight . UPDATE_ANY_VIDEO , res ) ) return
2018-07-12 13:02:00 -04: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 04:26:50 -04:00
if ( ! await doesVideoExist ( req . params . videoId , res , 'id' ) ) return
2018-07-12 13:02:00 -04:00
return next ( )
}
]
export {
addVideoCaptionValidator ,
listVideoCaptionsValidator ,
deleteVideoCaptionValidator
}