]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - controllers/api/v1/videos.js
Infile code reorganization
[github/Chocobozzz/PeerTube.git] / controllers / api / v1 / videos.js
CommitLineData
8c308c2b
C
1;(function () {
2 'use strict'
3
207fbab4 4 var config = require('config')
e78a20c7 5 var crypto = require('crypto')
c45f7f84 6 var express = require('express')
207fbab4 7 var multer = require('multer')
207fbab4 8
f5a60a51 9 var middleware = require('../../../middlewares')
b60035d8
C
10 var miscMiddleware = middleware.misc
11 var reqValidator = middleware.reqValidators.videos
cda02107 12 var videos = require('../../../models/videos')
8c308c2b 13
c45f7f84 14 var router = express.Router()
207fbab4
C
15 var uploads = config.get('storage.uploads')
16
c45f7f84
C
17 // multer configuration
18 var storage = multer.diskStorage({
19 destination: function (req, file, cb) {
20 cb(null, uploads)
21 },
8c308c2b 22
c45f7f84
C
23 filename: function (req, file, cb) {
24 var extension = ''
25 if (file.mimetype === 'video/webm') extension = 'webm'
26 else if (file.mimetype === 'video/mp4') extension = 'mp4'
27 else if (file.mimetype === 'video/ogg') extension = 'ogv'
28 crypto.pseudoRandomBytes(16, function (err, raw) {
29 var fieldname = err ? undefined : raw.toString('hex')
30 cb(null, fieldname + '.' + extension)
31 })
32 }
33 })
8c308c2b 34
c45f7f84 35 var reqFiles = multer({ storage: storage }).fields([{ name: 'input_video', maxCount: 1 }])
8c308c2b 36
c45f7f84
C
37 router.get('/', miscMiddleware.cache(false), listVideos)
38 router.post('/', reqFiles, reqValidator.videosAdd, miscMiddleware.cache(false), addVideos)
39 router.get('/:id', reqValidator.videosGet, miscMiddleware.cache(false), getVideos)
40 router.delete('/:id', reqValidator.videosRemove, miscMiddleware.cache(false), removeVideo)
41 router.get('/search/:name', reqValidator.videosSearch, miscMiddleware.cache(false), searchVideos)
42
43 // ---------------------------------------------------------------------------
44
45 module.exports = router
46
47 // ---------------------------------------------------------------------------
8c308c2b
C
48
49 function addVideos (req, res, next) {
207fbab4 50 videos.add({ video: req.files.input_video[0], data: req.body }, function (err) {
e63dc45f 51 if (err) return next(err)
8c308c2b
C
52
53 // TODO : include Location of the new video
54 res.sendStatus(201)
55 })
56 }
57
58 function getVideos (req, res, next) {
59 videos.get(req.params.id, function (err, video) {
e63dc45f 60 if (err) return next(err)
8c308c2b
C
61
62 if (video === null) {
63 return res.sendStatus(404)
64 }
65
66 res.json(video)
67 })
68 }
69
c45f7f84
C
70 function listVideos (req, res, next) {
71 videos.list(function (err, videos_list) {
72 if (err) return next(err)
73
74 res.json(videos_list)
75 })
76 }
77
8c308c2b
C
78 function removeVideo (req, res, next) {
79 videos.remove(req.params.id, function (err) {
e63dc45f 80 if (err) return next(err)
8c308c2b
C
81
82 res.sendStatus(204)
83 })
84 }
85
c45f7f84
C
86 function searchVideos (req, res, next) {
87 videos.search(req.params.name, function (err, videos_list) {
88 if (err) return next(err)
8c308c2b 89
c45f7f84
C
90 res.json(videos_list)
91 })
92 }
8c308c2b 93})()