From f2eb23cd87cf32b8fe545178143b5f49e06a58da Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Tue, 8 Dec 2020 21:16:10 +0100 Subject: emit more specific status codes on video upload (#3423) - reduce http status codes list to potentially useful codes - convert more codes to typed ones - factorize html generator for error responses --- server/helpers/custom-validators/misc.ts | 46 ++++++++++++++++++++++++++++++ server/helpers/custom-validators/videos.ts | 8 +++--- 2 files changed, 50 insertions(+), 4 deletions(-) (limited to 'server/helpers/custom-validators') diff --git a/server/helpers/custom-validators/misc.ts b/server/helpers/custom-validators/misc.ts index 61c03f0c9..effdd98cb 100644 --- a/server/helpers/custom-validators/misc.ts +++ b/server/helpers/custom-validators/misc.ts @@ -86,6 +86,50 @@ function toIntArray (value: any) { return value.map(v => validator.toInt(v)) } +function isFileFieldValid ( + files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[], + field: string, + optional = false +) { + // Should have files + if (!files) return optional + if (isArray(files)) return optional + + // Should have a file + const fileArray = files[field] + if (!fileArray || fileArray.length === 0) { + return optional + } + + // The file should exist + const file = fileArray[0] + if (!file || !file.originalname) return false + return file +} + +function isFileMimeTypeValid ( + files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[], + mimeTypeRegex: string, + field: string, + optional = false +) { + // Should have files + if (!files) return optional + if (isArray(files)) return optional + + // Should have a file + const fileArray = files[field] + if (!fileArray || fileArray.length === 0) { + return optional + } + + // The file should exist + const file = fileArray[0] + if (!file || !file.originalname) return false + + return new RegExp(`^${mimeTypeRegex}$`, 'i').test(file.mimetype) +} + function isFileValid ( files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[], mimeTypeRegex: string, @@ -132,5 +176,7 @@ export { toIntOrNull, toArray, toIntArray, + isFileFieldValid, + isFileMimeTypeValid, isFileValid } diff --git a/server/helpers/custom-validators/videos.ts b/server/helpers/custom-validators/videos.ts index 8b309ae42..87966798f 100644 --- a/server/helpers/custom-validators/videos.ts +++ b/server/helpers/custom-validators/videos.ts @@ -11,7 +11,7 @@ import { VIDEO_STATES, VIDEO_LIVE } from '../../initializers/constants' -import { exists, isArray, isDateValid, isFileValid } from './misc' +import { exists, isArray, isDateValid, isFileMimeTypeValid, isFileValid } from './misc' import * as magnetUtil from 'magnet-uri' const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS @@ -81,8 +81,8 @@ function isVideoFileExtnameValid (value: string) { return exists(value) && (value === VIDEO_LIVE.EXTENSION || MIMETYPES.VIDEO.EXT_MIMETYPE[value] !== undefined) } -function isVideoFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) { - return isFileValid(files, MIMETYPES.VIDEO.MIMETYPES_REGEX, 'videofile', null) +function isVideoFileMimeTypeValid (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) { + return isFileMimeTypeValid(files, MIMETYPES.VIDEO.MIMETYPES_REGEX, 'videofile') } const videoImageTypes = CONSTRAINTS_FIELDS.VIDEOS.IMAGE.EXTNAME @@ -143,12 +143,12 @@ export { isVideoFPSResolutionValid, isScheduleVideoUpdatePrivacyValid, isVideoOriginallyPublishedAtValid, - isVideoFile, isVideoMagnetUriValid, isVideoStateValid, isVideoViewsValid, isVideoRatingTypeValid, isVideoFileExtnameValid, + isVideoFileMimeTypeValid, isVideoDurationValid, isVideoTagValid, isVideoPrivacyValid, -- cgit v1.2.3