]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/remote.js
3e2aa6375f85df19c10e9d0bc358886e83897633
3 const each
= require('async/each')
4 const eachSeries
= require('async/eachSeries')
5 const express
= require('express')
6 const mongoose
= require('mongoose')
8 const middlewares
= require('../../middlewares')
9 const secureMiddleware
= middlewares
.secure
10 const validators
= middlewares
.validators
.remote
11 const logger
= require('../../helpers/logger')
13 const router
= express
.Router()
14 const Video
= mongoose
.model('Video')
16 router
.post('/videos',
18 validators
.dataToDecrypt
,
19 secureMiddleware
.checkSignature
,
20 secureMiddleware
.decryptBody
,
21 validators
.remoteVideos
,
25 // ---------------------------------------------------------------------------
27 module
.exports
= router
29 // ---------------------------------------------------------------------------
31 function remoteVideos (req
, res
, next
) {
32 const requests
= req
.body
.data
33 const fromHost
= req
.body
.signature
.host
35 // We need to process in the same order to keep consistency
37 eachSeries(requests
, function (request
, callbackEach
) {
38 const videoData
= request
.data
40 if (request
.type
=== 'add') {
41 addRemoteVideo(videoData
, callbackEach
)
42 } else if (request
.type
=== 'remove') {
43 removeRemoteVideo(videoData
, fromHost
, callbackEach
)
45 logger
.error('Unkown remote request type %s.', request
.type
)
48 if (err
) logger
.error('Error managing remote videos.', { error: err
})
51 // We don't need to keep the other pod waiting
52 return res
.type('json').status(204).end()
55 function addRemoteVideo (videoToCreateData
, callback
) {
56 logger
.debug('Adding remote video %s.', videoToCreateData
.magnetUri
)
58 const video
= new Video(videoToCreateData
)
59 Video
.generateThumbnailFromBase64(video
, videoToCreateData
.thumbnailBase64
, function (err
) {
61 logger
.error('Cannot generate thumbnail from base 64 data.', { error: err
})
69 function removeRemoteVideo (videoToRemoveData
, fromHost
, callback
) {
70 // We need the list because we have to remove some other stuffs (thumbnail etc)
71 Video
.listByHostAndRemoteId(fromHost
, videoToRemoveData
.remoteId
, function (err
, videosList
) {
73 logger
.error('Cannot list videos from host and magnets.', { error: err
})
77 if (videosList
.length
=== 0) {
78 logger
.error('No remote video was found for this pod.', { magnetUri: videoToRemoveData
.magnetUri
, podHost: fromHost
})
81 each(videosList
, function (video
, callbackEach
) {
82 logger
.debug('Removing remote video %s.', video
.magnetUri
)
84 video
.remove(callbackEach
)