]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/middlewares/reqValidators/videos.js
Fix readme roadmap
[github/Chocobozzz/PeerTube.git] / server / middlewares / reqValidators / videos.js
CommitLineData
9f10b292 1'use strict'
34ca3b52 2
f0f5567b 3const checkErrors = require('./utils').checkErrors
67100f1f 4const constants = require('../../initializers/constants')
be587647 5const customValidators = require('../../helpers/customValidators')
f0f5567b
C
6const logger = require('../../helpers/logger')
7const videos = require('../../lib/videos')
8const Videos = require('../../models/videos')
34ca3b52 9
f0f5567b 10const reqValidatorsVideos = {
9f10b292
C
11 videosAdd: videosAdd,
12 videosGet: videosGet,
13 videosRemove: videosRemove,
14 videosSearch: videosSearch
15}
34ca3b52 16
9f10b292 17function videosAdd (req, res, next) {
a4c15751
C
18 req.checkFiles('videofile[0].originalname', 'Should have an input video').notEmpty()
19 req.checkFiles('videofile[0].mimetype', 'Should have a correct mime type').matches(/video\/(webm)|(mp4)|(ogg)/i)
be587647
C
20 req.checkBody('name', 'Should have a valid name').isVideoNameValid()
21 req.checkBody('description', 'Should have a valid description').isVideoDescriptionValid()
22 req.checkBody('tags', 'Should have correct tags').isVideoTagsValid()
34ca3b52 23
9f10b292 24 logger.debug('Checking videosAdd parameters', { parameters: req.body, files: req.files })
34ca3b52 25
67100f1f
C
26 checkErrors(req, res, function () {
27 const videoFile = req.files.videofile[0]
28
29 videos.getVideoDuration(videoFile.path, function (err, duration) {
30 if (err) {
31 return res.status(400).send('Cannot retrieve metadata of the file.')
32 }
33
be587647 34 if (!customValidators.isVideoDurationValid(duration)) {
e822fdae 35 return res.status(400).send('Duration of the video file is too big (max: ' + constants.VIDEOS_CONSTRAINTS_FIELDS.DURATION.max + 's).')
67100f1f
C
36 }
37
38 videoFile.duration = duration
39 next()
40 })
41 })
9f10b292 42}
34ca3b52 43
9f10b292
C
44function videosGet (req, res, next) {
45 req.checkParams('id', 'Should have a valid id').notEmpty().isMongoId()
34ca3b52 46
9f10b292 47 logger.debug('Checking videosGet parameters', { parameters: req.params })
34ca3b52 48
9f10b292 49 checkErrors(req, res, function () {
5101105e 50 Videos.get(req.params.id, function (err, video) {
9f10b292
C
51 if (err) {
52 logger.error('Error in videosGet request validator.', { error: err })
be587647 53 return res.sendStatus(500)
9f10b292 54 }
c173e565 55
2df82d42
C
56 const state = videos.getVideoState(video)
57 if (state.exist === false) return res.status(404).send('Video not found')
34ca3b52 58
2df82d42 59 next()
34ca3b52 60 })
9f10b292
C
61 })
62}
34ca3b52 63
9f10b292
C
64function videosRemove (req, res, next) {
65 req.checkParams('id', 'Should have a valid id').notEmpty().isMongoId()
34ca3b52 66
9f10b292 67 logger.debug('Checking videosRemove parameters', { parameters: req.params })
34ca3b52 68
9f10b292 69 checkErrors(req, res, function () {
5101105e 70 Videos.get(req.params.id, function (err, video) {
9f10b292
C
71 if (err) {
72 logger.error('Error in videosRemove request validator.', { error: err })
be587647 73 return res.sendStatus(500)
9f10b292 74 }
c173e565 75
2df82d42
C
76 const state = videos.getVideoState(video)
77 if (state.exist === false) return res.status(404).send('Video not found')
78 else if (state.owned === false) return res.status(403).send('Cannot remove video of another pod')
34ca3b52 79
2df82d42 80 next()
34ca3b52 81 })
9f10b292
C
82 })
83}
34ca3b52 84
9f10b292 85function videosSearch (req, res, next) {
46246b5f 86 const searchableColumns = constants.SEARCHABLE_COLUMNS.VIDEOS
be587647 87 req.checkParams('value', 'Should have a valid search').notEmpty()
46246b5f 88 req.checkQuery('field', 'Should have correct searchable column').optional().isIn(searchableColumns)
c45f7f84 89
9f10b292 90 logger.debug('Checking videosSearch parameters', { parameters: req.params })
c45f7f84 91
9f10b292
C
92 checkErrors(req, res, next)
93}
c45f7f84 94
9f10b292 95// ---------------------------------------------------------------------------
c45f7f84 96
9f10b292 97module.exports = reqValidatorsVideos