]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/custom-validators/misc.ts
Improve video torrent AP object validator
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / misc.ts
index 160ec91f3912211c4ea9b787d489ea9aa981a4d7..275482fa19ca2d2c9bc5c1df5fd54106783cc167 100644 (file)
@@ -1,3 +1,4 @@
+import 'multer'
 import * as validator from 'validator'
 
 function exists (value: any) {
@@ -24,6 +25,45 @@ function isIdOrUUIDValid (value: string) {
   return isIdValid(value) || isUUIDValid(value)
 }
 
+function isBooleanValid (value: any) {
+  return typeof value === 'boolean' || (typeof value === 'string' && validator.isBoolean(value))
+}
+
+function toIntOrNull (value: string) {
+  if (value === 'null') return null
+
+  return validator.toInt(value)
+}
+
+function toStringOrNull (value: string) {
+  if (value === 'null') return null
+
+  return value
+}
+
+function isFileValid (
+  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)
+}
+
 // ---------------------------------------------------------------------------
 
 export {
@@ -32,5 +72,9 @@ export {
   isIdValid,
   isUUIDValid,
   isIdOrUUIDValid,
-  isDateValid
+  isDateValid,
+  toStringOrNull,
+  isBooleanValid,
+  toIntOrNull,
+  isFileValid
 }