aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/controllers/api/v1/remote.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/controllers/api/v1/remote.js')
-rw-r--r--server/controllers/api/v1/remote.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/server/controllers/api/v1/remote.js b/server/controllers/api/v1/remote.js
new file mode 100644
index 000000000..ced8470d7
--- /dev/null
+++ b/server/controllers/api/v1/remote.js
@@ -0,0 +1,80 @@
1'use strict'
2
3const async = require('async')
4const express = require('express')
5
6const middlewares = require('../../../middlewares')
7const secureMiddleware = middlewares.secure
8const reqValidator = middlewares.reqValidators.remote
9const logger = require('../../../helpers/logger')
10const Videos = require('../../../models/videos')
11const videos = require('../../../lib/videos')
12
13const router = express.Router()
14
15router.post('/videos',
16 reqValidator.signature,
17 reqValidator.dataToDecrypt,
18 secureMiddleware.decryptBody,
19 reqValidator.remoteVideos,
20 remoteVideos
21)
22
23// ---------------------------------------------------------------------------
24
25module.exports = router
26
27// ---------------------------------------------------------------------------
28
29function remoteVideos (req, res, next) {
30 const requests = req.body.data
31 const fromUrl = req.body.signature.url
32
33 // We need to process in the same order to keep consistency
34 // TODO: optimization
35 async.eachSeries(requests, function (request, callbackEach) {
36 const video = request.data
37
38 if (request.type === 'add') {
39 addRemoteVideo(video, callbackEach)
40 } else if (request.type === 'remove') {
41 removeRemoteVideo(video, fromUrl, callbackEach)
42 }
43 })
44
45 // We don't need to keep the other pod waiting
46 return res.type('json').status(204).end()
47}
48
49function addRemoteVideo (videoToCreate, callback) {
50 videos.createRemoteVideos([ videoToCreate ], function (err, remoteVideos) {
51 if (err) {
52 logger.error('Cannot create remote videos.', { error: err })
53 // Don't break the process
54 }
55
56 return callback()
57 })
58}
59
60function removeRemoteVideo (videoToRemove, fromUrl, callback) {
61 const magnetUris = [ videoToRemove.magnetUri ]
62
63 // We need the list because we have to remove some other stuffs (thumbnail etc)
64 Videos.listFromUrlAndMagnets(fromUrl, magnetUris, function (err, videosList) {
65 if (err) {
66 logger.error('Cannot list videos from url and magnets.', { error: err })
67 // Don't break the process
68 return callback()
69 }
70
71 videos.removeRemoteVideos(videosList, function (err) {
72 if (err) {
73 logger.error('Cannot remove remote videos.', { error: err })
74 // Don't break the process
75 }
76
77 return callback()
78 })
79 })
80}