]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/middlewares/reqValidators/videos.js
Video model refractoring -> use mongoose api
[github/Chocobozzz/PeerTube.git] / server / middlewares / reqValidators / videos.js
index 12e878e81169f8c6ef58e2bdf1ed23e14160b2da..452fbc859e0686873ac740f722590f222a726a95 100644 (file)
@@ -1,9 +1,13 @@
 'use strict'
 
+const mongoose = require('mongoose')
+
 const checkErrors = require('./utils').checkErrors
+const constants = require('../../initializers/constants')
+const customValidators = require('../../helpers/customValidators')
 const logger = require('../../helpers/logger')
-const videos = require('../../lib/videos')
-const Videos = require('../../models/videos')
+
+const Video = mongoose.model('Video')
 
 const reqValidatorsVideos = {
   videosAdd: videosAdd,
@@ -13,14 +17,30 @@ const reqValidatorsVideos = {
 }
 
 function videosAdd (req, res, next) {
-  req.checkFiles('input_video[0].originalname', 'Should have an input video').notEmpty()
-  req.checkFiles('input_video[0].mimetype', 'Should have a correct mime type').matches(/video\/(webm)|(mp4)|(ogg)/i)
-  req.checkBody('name', 'Should have a name').isLength(1, 50)
-  req.checkBody('description', 'Should have a description').isLength(1, 250)
+  req.checkFiles('videofile[0].originalname', 'Should have an input video').notEmpty()
+  req.checkFiles('videofile[0].mimetype', 'Should have a correct mime type').matches(/video\/(webm)|(mp4)|(ogg)/i)
+  req.checkBody('name', 'Should have a valid name').isVideoNameValid()
+  req.checkBody('description', 'Should have a valid description').isVideoDescriptionValid()
+  req.checkBody('tags', 'Should have correct tags').isVideoTagsValid()
 
   logger.debug('Checking videosAdd parameters', { parameters: req.body, files: req.files })
 
-  checkErrors(req, res, next)
+  checkErrors(req, res, function () {
+    const videoFile = req.files.videofile[0]
+
+    Video.getDurationFromFile(videoFile.path, function (err, duration) {
+      if (err) {
+        return res.status(400).send('Cannot retrieve metadata of the file.')
+      }
+
+      if (!customValidators.isVideoDurationValid(duration)) {
+        return res.status(400).send('Duration of the video file is too big (max: ' + constants.VIDEOS_CONSTRAINTS_FIELDS.DURATION.max + 's).')
+      }
+
+      videoFile.duration = duration
+      next()
+    })
+  })
 }
 
 function videosGet (req, res, next) {
@@ -29,14 +49,13 @@ function videosGet (req, res, next) {
   logger.debug('Checking videosGet parameters', { parameters: req.params })
 
   checkErrors(req, res, function () {
-    Videos.get(req.params.id, function (err, video) {
+    Video.load(req.params.id, function (err, video) {
       if (err) {
         logger.error('Error in videosGet request validator.', { error: err })
-        res.sendStatus(500)
+        return res.sendStatus(500)
       }
 
-      const state = videos.getVideoState(video)
-      if (state.exist === false) return res.status(404).send('Video not found')
+      if (!video) return res.status(404).send('Video not found')
 
       next()
     })
@@ -49,15 +68,14 @@ function videosRemove (req, res, next) {
   logger.debug('Checking videosRemove parameters', { parameters: req.params })
 
   checkErrors(req, res, function () {
-    Videos.get(req.params.id, function (err, video) {
+    Video.load(req.params.id, function (err, video) {
       if (err) {
         logger.error('Error in videosRemove request validator.', { error: err })
-        res.sendStatus(500)
+        return res.sendStatus(500)
       }
 
-      const state = videos.getVideoState(video)
-      if (state.exist === false) return res.status(404).send('Video not found')
-      else if (state.owned === false) return res.status(403).send('Cannot remove video of another pod')
+      if (!video) return res.status(404).send('Video not found')
+      else if (video.isOwned() === false) return res.status(403).send('Cannot remove video of another pod')
 
       next()
     })
@@ -65,7 +83,9 @@ function videosRemove (req, res, next) {
 }
 
 function videosSearch (req, res, next) {
-  req.checkParams('name', 'Should have a name').notEmpty()
+  const searchableColumns = constants.SEARCHABLE_COLUMNS.VIDEOS
+  req.checkParams('value', 'Should have a valid search').notEmpty()
+  req.checkQuery('field', 'Should have correct searchable column').optional().isIn(searchableColumns)
 
   logger.debug('Checking videosSearch parameters', { parameters: req.params })