const friends = require('../../../lib/friends')
const middlewares = require('../../../middlewares')
const oAuth = middlewares.oauth
-const reqValidator = middlewares.reqValidators.pods
-const signatureValidator = middlewares.reqValidators.remote.signature
+const validators = middlewares.validators.pods
+const signatureValidator = middlewares.validators.remote.signature
const router = express.Router()
const Pod = mongoose.model('Pod')
const Video = mongoose.model('Video')
router.get('/', listPodsUrl)
-router.post('/', reqValidator.podsAdd, addPods)
-router.get('/makefriends', oAuth.authenticate, reqValidator.makeFriends, makeFriends)
+router.post('/', validators.podsAdd, addPods)
+router.get('/makefriends', oAuth.authenticate, validators.makeFriends, makeFriends)
router.get('/quitfriends', oAuth.authenticate, quitFriends)
// Post because this is a secured request
router.post('/remove', signatureValidator, removePods)
const middlewares = require('../../../middlewares')
const secureMiddleware = middlewares.secure
-const reqValidator = middlewares.reqValidators.remote
+const validators = middlewares.validators.remote
const logger = require('../../../helpers/logger')
const router = express.Router()
const Video = mongoose.model('Video')
router.post('/videos',
- reqValidator.signature,
- reqValidator.dataToDecrypt,
+ validators.signature,
+ validators.dataToDecrypt,
secureMiddleware.decryptBody,
- reqValidator.remoteVideos,
+ validators.remoteVideos,
remoteVideos
)
const config = require('config')
const mongoose = require('mongoose')
const express = require('express')
+
const oAuth = require('../../../middlewares').oauth
const Client = mongoose.model('OAuthClient')
const middlewares = require('../../../middlewares')
const oAuth = middlewares.oauth
const pagination = middlewares.pagination
-const reqValidator = middlewares.reqValidators
-const reqValidatorPagination = reqValidator.pagination
-const reqValidatorSort = reqValidator.sort
-const reqValidatorVideos = reqValidator.videos
+const validators = middlewares.validators
+const validatorsPagination = validators.pagination
+const validatorsSort = validators.sort
+const validatorsVideos = validators.videos
const search = middlewares.search
const sort = middlewares.sort
const utils = require('../../../helpers/utils')
const reqFiles = multer({ storage: storage }).fields([{ name: 'videofile', maxCount: 1 }])
router.get('/',
- reqValidatorPagination.pagination,
- reqValidatorSort.videosSort,
+ validatorsPagination.pagination,
+ validatorsSort.videosSort,
sort.setVideosSort,
pagination.setPagination,
listVideos
router.post('/',
oAuth.authenticate,
reqFiles,
- reqValidatorVideos.videosAdd,
+ validatorsVideos.videosAdd,
addVideo
)
router.get('/:id',
- reqValidatorVideos.videosGet,
+ validatorsVideos.videosGet,
getVideo
)
router.delete('/:id',
oAuth.authenticate,
- reqValidatorVideos.videosRemove,
+ validatorsVideos.videosRemove,
removeVideo
)
router.get('/search/:value',
- reqValidatorVideos.videosSearch,
- reqValidatorPagination.pagination,
- reqValidatorSort.videosSort,
+ validatorsVideos.videosSearch,
+ validatorsPagination.pagination,
+ validatorsSort.videosSort,
sort.setVideosSort,
pagination.setPagination,
search.setVideosSearch,
const oauth = require('./oauth')
const pagination = require('./pagination')
-const reqValidatorsMiddleware = require('./reqValidators')
+const validatorsMiddleware = require('./validators')
const search = require('./search')
const sort = require('./sort')
const secureMiddleware = require('./secure')
const middlewares = {
oauth: oauth,
pagination: pagination,
- reqValidators: reqValidatorsMiddleware,
+ validators: validatorsMiddleware,
search: search,
sort: sort,
secure: secureMiddleware
+++ /dev/null
-'use strict'
-
-const paginationReqValidators = require('./pagination')
-const podsReqValidators = require('./pods')
-const remoteReqValidators = require('./remote')
-const sortReqValidators = require('./sort')
-const videosReqValidators = require('./videos')
-
-const reqValidators = {
- pagination: paginationReqValidators,
- pods: podsReqValidators,
- remote: remoteReqValidators,
- sort: sortReqValidators,
- videos: videosReqValidators
-}
-
-// ---------------------------------------------------------------------------
-
-module.exports = reqValidators
+++ /dev/null
-'use strict'
-
-const checkErrors = require('./utils').checkErrors
-const logger = require('../../helpers/logger')
-
-const reqValidatorsPagination = {
- pagination: pagination
-}
-
-function pagination (req, res, next) {
- req.checkQuery('start', 'Should have a number start').optional().isInt()
- req.checkQuery('count', 'Should have a number count').optional().isInt()
-
- logger.debug('Checking pagination parameters', { parameters: req.query })
-
- checkErrors(req, res, next)
-}
-
-// ---------------------------------------------------------------------------
-
-module.exports = reqValidatorsPagination
+++ /dev/null
-'use strict'
-
-const checkErrors = require('./utils').checkErrors
-const friends = require('../../lib/friends')
-const logger = require('../../helpers/logger')
-
-const reqValidatorsPod = {
- makeFriends: makeFriends,
- podsAdd: podsAdd
-}
-
-function makeFriends (req, res, next) {
- friends.hasFriends(function (err, hasFriends) {
- if (err) {
- logger.error('Cannot know if we have friends.', { error: err })
- res.sendStatus(500)
- }
-
- if (hasFriends === true) {
- // We need to quit our friends before make new ones
- res.sendStatus(409)
- } else {
- return next()
- }
- })
-}
-
-function podsAdd (req, res, next) {
- req.checkBody('url', 'Should have an url').notEmpty().isURL({ require_protocol: true })
- req.checkBody('publicKey', 'Should have a public key').notEmpty()
-
- // TODO: check we don't have it already
-
- logger.debug('Checking podsAdd parameters', { parameters: req.body })
-
- checkErrors(req, res, next)
-}
-
-// ---------------------------------------------------------------------------
-
-module.exports = reqValidatorsPod
+++ /dev/null
-'use strict'
-
-const checkErrors = require('./utils').checkErrors
-const logger = require('../../helpers/logger')
-
-const reqValidatorsRemote = {
- dataToDecrypt: dataToDecrypt,
- remoteVideos: remoteVideos,
- signature: signature
-}
-
-function dataToDecrypt (req, res, next) {
- req.checkBody('key', 'Should have a key').notEmpty()
- req.checkBody('data', 'Should have data').notEmpty()
-
- logger.debug('Checking dataToDecrypt parameters', { parameters: { keyLength: req.body.key.length, bodyLength: req.body.data.length } })
-
- checkErrors(req, res, next)
-}
-
-function remoteVideos (req, res, next) {
- req.checkBody('data').isArray()
- req.checkBody('data').isEachRemoteVideosValid()
-
- logger.debug('Checking remoteVideos parameters', { parameters: req.body })
-
- checkErrors(req, res, next)
-}
-
-function signature (req, res, next) {
- req.checkBody('signature.url', 'Should have a signature url').isURL()
- req.checkBody('signature.signature', 'Should have a signature').notEmpty()
-
- logger.debug('Checking signature parameters', { parameters: { signatureUrl: req.body.signature.url } })
-
- checkErrors(req, res, next)
-}
-
-// ---------------------------------------------------------------------------
-
-module.exports = reqValidatorsRemote
+++ /dev/null
-'use strict'
-
-const checkErrors = require('./utils').checkErrors
-const constants = require('../../initializers/constants')
-const logger = require('../../helpers/logger')
-
-const reqValidatorsSort = {
- videosSort: videosSort
-}
-
-function videosSort (req, res, next) {
- const sortableColumns = constants.SORTABLE_COLUMNS.VIDEOS
-
- req.checkQuery('sort', 'Should have correct sortable column').optional().isIn(sortableColumns)
-
- logger.debug('Checking sort parameters', { parameters: req.query })
-
- checkErrors(req, res, next)
-}
-
-// ---------------------------------------------------------------------------
-
-module.exports = reqValidatorsSort
+++ /dev/null
-'use strict'
-
-const util = require('util')
-
-const logger = require('../../helpers/logger')
-
-const reqValidatorsUtils = {
- checkErrors: checkErrors
-}
-
-function checkErrors (req, res, next, statusCode) {
- if (statusCode === undefined) statusCode = 400
- const errors = req.validationErrors()
-
- if (errors) {
- logger.warn('Incorrect request parameters', { path: req.originalUrl, err: errors })
- return res.status(statusCode).send('There have been validation errors: ' + util.inspect(errors))
- }
-
- return next()
-}
-
-// ---------------------------------------------------------------------------
-
-module.exports = reqValidatorsUtils
+++ /dev/null
-'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 Video = mongoose.model('Video')
-
-const reqValidatorsVideos = {
- videosAdd: videosAdd,
- videosGet: videosGet,
- videosRemove: videosRemove,
- videosSearch: videosSearch
-}
-
-function videosAdd (req, res, next) {
- 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, 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) {
- req.checkParams('id', 'Should have a valid id').notEmpty().isMongoId()
-
- logger.debug('Checking videosGet parameters', { parameters: req.params })
-
- checkErrors(req, res, function () {
- Video.load(req.params.id, function (err, video) {
- if (err) {
- logger.error('Error in videosGet request validator.', { error: err })
- return res.sendStatus(500)
- }
-
- if (!video) return res.status(404).send('Video not found')
-
- next()
- })
- })
-}
-
-function videosRemove (req, res, next) {
- req.checkParams('id', 'Should have a valid id').notEmpty().isMongoId()
-
- logger.debug('Checking videosRemove parameters', { parameters: req.params })
-
- checkErrors(req, res, function () {
- Video.load(req.params.id, function (err, video) {
- if (err) {
- logger.error('Error in videosRemove request validator.', { error: err })
- return res.sendStatus(500)
- }
-
- 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()
- })
- })
-}
-
-function videosSearch (req, res, next) {
- 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 })
-
- checkErrors(req, res, next)
-}
-
-// ---------------------------------------------------------------------------
-
-module.exports = reqValidatorsVideos
--- /dev/null
+'use strict'
+
+const paginationValidators = require('./pagination')
+const podsValidators = require('./pods')
+const remoteValidators = require('./remote')
+const sortValidators = require('./sort')
+const videosValidators = require('./videos')
+
+const validators = {
+ pagination: paginationValidators,
+ pods: podsValidators,
+ remote: remoteValidators,
+ sort: sortValidators,
+ videos: videosValidators
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validators
--- /dev/null
+'use strict'
+
+const checkErrors = require('./utils').checkErrors
+const logger = require('../../helpers/logger')
+
+const validatorsPagination = {
+ pagination: pagination
+}
+
+function pagination (req, res, next) {
+ req.checkQuery('start', 'Should have a number start').optional().isInt()
+ req.checkQuery('count', 'Should have a number count').optional().isInt()
+
+ logger.debug('Checking pagination parameters', { parameters: req.query })
+
+ checkErrors(req, res, next)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validatorsPagination
--- /dev/null
+'use strict'
+
+const checkErrors = require('./utils').checkErrors
+const friends = require('../../lib/friends')
+const logger = require('../../helpers/logger')
+
+const validatorsPod = {
+ makeFriends: makeFriends,
+ podsAdd: podsAdd
+}
+
+function makeFriends (req, res, next) {
+ friends.hasFriends(function (err, hasFriends) {
+ if (err) {
+ logger.error('Cannot know if we have friends.', { error: err })
+ res.sendStatus(500)
+ }
+
+ if (hasFriends === true) {
+ // We need to quit our friends before make new ones
+ res.sendStatus(409)
+ } else {
+ return next()
+ }
+ })
+}
+
+function podsAdd (req, res, next) {
+ req.checkBody('url', 'Should have an url').notEmpty().isURL({ require_protocol: true })
+ req.checkBody('publicKey', 'Should have a public key').notEmpty()
+
+ // TODO: check we don't have it already
+
+ logger.debug('Checking podsAdd parameters', { parameters: req.body })
+
+ checkErrors(req, res, next)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validatorsPod
--- /dev/null
+'use strict'
+
+const checkErrors = require('./utils').checkErrors
+const logger = require('../../helpers/logger')
+
+const validatorsRemote = {
+ dataToDecrypt: dataToDecrypt,
+ remoteVideos: remoteVideos,
+ signature: signature
+}
+
+function dataToDecrypt (req, res, next) {
+ req.checkBody('key', 'Should have a key').notEmpty()
+ req.checkBody('data', 'Should have data').notEmpty()
+
+ logger.debug('Checking dataToDecrypt parameters', { parameters: { keyLength: req.body.key.length, bodyLength: req.body.data.length } })
+
+ checkErrors(req, res, next)
+}
+
+function remoteVideos (req, res, next) {
+ req.checkBody('data').isArray()
+ req.checkBody('data').isEachRemoteVideosValid()
+
+ logger.debug('Checking remoteVideos parameters', { parameters: req.body })
+
+ checkErrors(req, res, next)
+}
+
+function signature (req, res, next) {
+ req.checkBody('signature.url', 'Should have a signature url').isURL()
+ req.checkBody('signature.signature', 'Should have a signature').notEmpty()
+
+ logger.debug('Checking signature parameters', { parameters: { signatureUrl: req.body.signature.url } })
+
+ checkErrors(req, res, next)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validatorsRemote
--- /dev/null
+'use strict'
+
+const checkErrors = require('./utils').checkErrors
+const constants = require('../../initializers/constants')
+const logger = require('../../helpers/logger')
+
+const validatorsSort = {
+ videosSort: videosSort
+}
+
+function videosSort (req, res, next) {
+ const sortableColumns = constants.SORTABLE_COLUMNS.VIDEOS
+
+ req.checkQuery('sort', 'Should have correct sortable column').optional().isIn(sortableColumns)
+
+ logger.debug('Checking sort parameters', { parameters: req.query })
+
+ checkErrors(req, res, next)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validatorsSort
--- /dev/null
+'use strict'
+
+const util = require('util')
+
+const logger = require('../../helpers/logger')
+
+const validatorsUtils = {
+ checkErrors: checkErrors
+}
+
+function checkErrors (req, res, next, statusCode) {
+ if (statusCode === undefined) statusCode = 400
+ const errors = req.validationErrors()
+
+ if (errors) {
+ logger.warn('Incorrect request parameters', { path: req.originalUrl, err: errors })
+ return res.status(statusCode).send('There have been validation errors: ' + util.inspect(errors))
+ }
+
+ return next()
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validatorsUtils
--- /dev/null
+'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 Video = mongoose.model('Video')
+
+const validatorsVideos = {
+ videosAdd: videosAdd,
+ videosGet: videosGet,
+ videosRemove: videosRemove,
+ videosSearch: videosSearch
+}
+
+function videosAdd (req, res, next) {
+ 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, 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) {
+ req.checkParams('id', 'Should have a valid id').notEmpty().isMongoId()
+
+ logger.debug('Checking videosGet parameters', { parameters: req.params })
+
+ checkErrors(req, res, function () {
+ Video.load(req.params.id, function (err, video) {
+ if (err) {
+ logger.error('Error in videosGet request validator.', { error: err })
+ return res.sendStatus(500)
+ }
+
+ if (!video) return res.status(404).send('Video not found')
+
+ next()
+ })
+ })
+}
+
+function videosRemove (req, res, next) {
+ req.checkParams('id', 'Should have a valid id').notEmpty().isMongoId()
+
+ logger.debug('Checking videosRemove parameters', { parameters: req.params })
+
+ checkErrors(req, res, function () {
+ Video.load(req.params.id, function (err, video) {
+ if (err) {
+ logger.error('Error in videosRemove request validator.', { error: err })
+ return res.sendStatus(500)
+ }
+
+ 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()
+ })
+ })
+}
+
+function videosSearch (req, res, next) {
+ 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 })
+
+ checkErrors(req, res, next)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validatorsVideos