]>
Commit | Line | Data |
---|---|---|
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 | })() |