X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fcustom-validators%2Fvideo-captions.ts;h=0e24655a081a793864a6890c5375bd0cdecd6fed;hb=c56dd2807fe5d129907b9bf8c42656a8314d754b;hp=9abbce04a110b3e7fae1b1fb5429ae6303b808df;hpb=2ad9dcda240ee843c5e4a5b98cc94f7b2aab2c89;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/custom-validators/video-captions.ts b/server/helpers/custom-validators/video-captions.ts index 9abbce04a..0e24655a0 100644 --- a/server/helpers/custom-validators/video-captions.ts +++ b/server/helpers/custom-validators/video-captions.ts @@ -1,21 +1,43 @@ +import { UploadFilesForCheck } from 'express' +import { readFile } from 'fs-extra' +import { getFileSize } from '@shared/extra-utils' import { CONSTRAINTS_FIELDS, MIMETYPES, VIDEO_LANGUAGES } from '../../initializers/constants' +import { logger } from '../logger' import { exists, isFileValid } from './misc' function isVideoCaptionLanguageValid (value: any) { return exists(value) && VIDEO_LANGUAGES[value] !== undefined } -const videoCaptionTypes = Object.keys(MIMETYPES.VIDEO_CAPTIONS.MIMETYPE_EXT) - .concat([ 'application/octet-stream' ]) // MacOS sends application/octet-stream >< - .map(m => `(${m})`) -const videoCaptionTypesRegex = videoCaptionTypes.join('|') -function isVideoCaptionFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[], field: string) { - return isFileValid(files, videoCaptionTypesRegex, field, CONSTRAINTS_FIELDS.VIDEO_CAPTIONS.CAPTION_FILE.FILE_SIZE.max) +// MacOS sends application/octet-stream +const videoCaptionTypesRegex = [ ...Object.keys(MIMETYPES.VIDEO_CAPTIONS.MIMETYPE_EXT), 'application/octet-stream' ] + .map(m => `(${m})`) + .join('|') + +function isVideoCaptionFile (files: UploadFilesForCheck, field: string) { + return isFileValid({ + files, + mimeTypeRegex: videoCaptionTypesRegex, + field, + maxSize: CONSTRAINTS_FIELDS.VIDEO_CAPTIONS.CAPTION_FILE.FILE_SIZE.max + }) +} + +async function isVTTFileValid (filePath: string) { + const size = await getFileSize(filePath) + const content = await readFile(filePath, 'utf8') + + logger.debug('Checking VTT file %s', filePath, { size, content }) + + if (size > CONSTRAINTS_FIELDS.VIDEO_CAPTIONS.CAPTION_FILE.FILE_SIZE.max) return false + + return content?.startsWith('WEBVTT') } // --------------------------------------------------------------------------- export { isVideoCaptionFile, + isVTTFileValid, isVideoCaptionLanguageValid }