]>
Commit | Line | Data |
---|---|---|
9f10b292 | 1 | 'use strict' |
34ca3b52 | 2 | |
f0f5567b | 3 | const checkErrors = require('./utils').checkErrors |
67100f1f | 4 | const constants = require('../../initializers/constants') |
be587647 | 5 | const customValidators = require('../../helpers/customValidators') |
f0f5567b C |
6 | const logger = require('../../helpers/logger') |
7 | const videos = require('../../lib/videos') | |
8 | const Videos = require('../../models/videos') | |
34ca3b52 | 9 | |
f0f5567b | 10 | const reqValidatorsVideos = { |
9f10b292 C |
11 | videosAdd: videosAdd, |
12 | videosGet: videosGet, | |
13 | videosRemove: videosRemove, | |
14 | videosSearch: videosSearch | |
15 | } | |
34ca3b52 | 16 | |
9f10b292 | 17 | function 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 |
44 | function 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 |
64 | function 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 | 85 | function 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 | 97 | module.exports = reqValidatorsVideos |