]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/customValidators.js
Add tags support to server
[github/Chocobozzz/PeerTube.git] / server / helpers / customValidators.js
index a5ae32780c09b126075fe8452e6f00716b1e992d..9c3ff38ef03d39ae9941c54b7da73e48c1450791 100644 (file)
@@ -1,25 +1,47 @@
 'use strict'
 
-const validator = require('validator')
+const validator = require('express-validator').validator
+
+const constants = require('../initializers/constants')
+const VIDEOS_CONSTRAINTS_FIELDS = constants.VIDEOS_CONSTRAINTS_FIELDS
 
 const customValidators = {
-  eachIsRemoteVideosAddValid: eachIsRemoteVideosAddValid,
-  eachIsRemoteVideosRemoveValid: eachIsRemoteVideosRemoveValid,
-  isArray: isArray
+  exists: exists,
+  isEachAddRemoteVideosValid: isEachAddRemoteVideosValid,
+  isEachRemoveRemoteVideosValid: isEachRemoveRemoteVideosValid,
+  isArray: isArray,
+  isVideoAuthorValid: isVideoAuthorValid,
+  isVideoDateValid: isVideoDateValid,
+  isVideoDescriptionValid: isVideoDescriptionValid,
+  isVideoDurationValid: isVideoDurationValid,
+  isVideoMagnetUriValid: isVideoMagnetUriValid,
+  isVideoNameValid: isVideoNameValid,
+  isVideoPodUrlValid: isVideoPodUrlValid,
+  isVideoTagsValid: isVideoTagsValid,
+  isVideoThumbnailValid: isVideoThumbnailValid
+}
+
+function exists (value) {
+  return value !== undefined && value !== null
 }
 
-function eachIsRemoteVideosAddValid (values) {
-  return values.every(function (val) {
-    return validator.isLength(val.name, 1, 50) &&
-      validator.isLength(val.description, 1, 50) &&
-      validator.isLength(val.magnetUri, 10) &&
-      validator.isURL(val.podUrl)
+function isEachAddRemoteVideosValid (videos) {
+  return videos.every(function (video) {
+    return isVideoAuthorValid(video.author) &&
+           isVideoDateValid(video.createdDate) &&
+           isVideoDescriptionValid(video.description) &&
+           isVideoDurationValid(video.duration) &&
+           isVideoMagnetUriValid(video.magnetUri) &&
+           isVideoNameValid(video.name) &&
+           isVideoPodUrlValid(video.podUrl) &&
+           isVideoTagsValid(video.tags) &&
+           isVideoThumbnailValid(video.thumbnailBase64)
   })
 }
 
-function eachIsRemoteVideosRemoveValid (values) {
-  return values.every(function (val) {
-    return validator.isLength(val.magnetUri, 10)
+function isEachRemoveRemoteVideosValid (videos) {
+  return videos.every(function (video) {
+    return isVideoMagnetUriValid(video.magnetUri)
   })
 }
 
@@ -27,6 +49,50 @@ function isArray (value) {
   return Array.isArray(value)
 }
 
+function isVideoAuthorValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.AUTHOR)
+}
+
+function isVideoDateValid (value) {
+  return validator.isDate(value)
+}
+
+function isVideoDescriptionValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
+}
+
+function isVideoDurationValid (value) {
+  return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION)
+}
+
+function isVideoMagnetUriValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.MAGNET_URI)
+}
+
+function isVideoNameValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME)
+}
+
+function isVideoPodUrlValid (value) {
+  return validator.isURL(value)
+}
+
+function isVideoTagsValid (tags) {
+  return isArray(tags) &&
+         validator.isInt(tags.length, VIDEOS_CONSTRAINTS_FIELDS.TAGS) &&
+         tags.every(function (tag) {
+           return validator.isAlphanumeric(tag) &&
+                  validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
+         })
+}
+
+function isVideoThumbnailValid (value) {
+  return validator.isBase64(value) &&
+         validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
+}
+
 // ---------------------------------------------------------------------------
 
 module.exports = customValidators
+
+// ---------------------------------------------------------------------------