aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/helpers/custom-validators/videos.js
blob: cffa973f8f68927bf28f78daf07b7c86a9d480a3 (plain) (tree)
1
2
3
4
5
6
7
8
9
            
 
                                                        
 



                                                                     
 
                          
                                                   







                                                   

                                                  

 












                                                   
                                                    





                                               

    
 
                                     
                                                   






















                                                                         
                               



                                  
                                        







                                                                        



                                                                       
                                     
                                                                             

 
                                                                              
 
                                 

                                                                              







                                           
'use strict'

const validator = require('express-validator').validator

const constants = require('../../initializers/constants')
const usersValidators = require('./users')
const miscValidators = require('./misc')
const VIDEOS_CONSTRAINTS_FIELDS = constants.CONSTRAINTS_FIELDS.VIDEOS

const videosValidators = {
  isEachRemoteVideosValid: isEachRemoteVideosValid,
  isVideoAuthorValid: isVideoAuthorValid,
  isVideoDateValid: isVideoDateValid,
  isVideoDescriptionValid: isVideoDescriptionValid,
  isVideoDurationValid: isVideoDurationValid,
  isVideoMagnetUriValid: isVideoMagnetUriValid,
  isVideoNameValid: isVideoNameValid,
  isVideoPodUrlValid: isVideoPodUrlValid,
  isVideoTagsValid: isVideoTagsValid,
  isVideoThumbnailValid: isVideoThumbnailValid,
  isVideoThumbnail64Valid: isVideoThumbnail64Valid
}

function isEachRemoteVideosValid (requests) {
  return requests.every(function (request) {
    const video = request.data
    return (
      isRequestTypeAddValid(request.type) &&
      isVideoAuthorValid(video.author) &&
      isVideoDateValid(video.createdDate) &&
      isVideoDescriptionValid(video.description) &&
      isVideoDurationValid(video.duration) &&
      isVideoMagnetUriValid(video.magnetUri) &&
      isVideoNameValid(video.name) &&
      isVideoPodUrlValid(video.podUrl) &&
      isVideoTagsValid(video.tags) &&
      isVideoThumbnail64Valid(video.thumbnailBase64)
    ) ||
    (
      isRequestTypeRemoveValid(request.type) &&
      isVideoNameValid(video.name) &&
      isVideoMagnetUriValid(video.magnetUri)
    )
  })
}

function isVideoAuthorValid (value) {
  return usersValidators.isUserUsernameValid(value)
}

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) {
  // TODO: set options (TLD...)
  return validator.isURL(value)
}

function isVideoTagsValid (tags) {
  return miscValidators.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.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
}

function isVideoThumbnail64Valid (value) {
  return validator.isBase64(value) &&
         validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL64)
}

// ---------------------------------------------------------------------------

module.exports = videosValidators

// ---------------------------------------------------------------------------

function isRequestTypeAddValid (value) {
  return value === 'add'
}

function isRequestTypeRemoveValid (value) {
  return value === 'remove'
}