'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(usersValidators) } 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' }