]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/remote.js
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 fromUrl
= req
.body
.signature
.url
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
, fromUrl
, 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 // Mongoose pre hook will automatically create the thumbnail on disk
59 videoToCreateData
.thumbnail
= videoToCreateData
.thumbnailBase64
61 const video
= new Video(videoToCreateData
)
65 function removeRemoteVideo (videoToRemoveData
, fromUrl
, callback
) {
66 // We need the list because we have to remove some other stuffs (thumbnail etc)
67 Video
.listByUrlAndRemoteId(fromUrl
, videoToRemoveData
.remoteId
, function (err
, videosList
) {
69 logger
.error('Cannot list videos from url and magnets.', { error: err
})
73 if (videosList
.length
=== 0) {
74 logger
.error('No remote video was found for this pod.', { magnetUri: videoToRemoveData
.magnetUri
, podUrl: fromUrl
})
77 each(videosList
, function (video
, callbackEach
) {
78 logger
.debug('Removing remote video %s.', video
.magnetUri
)
80 video
.remove(callbackEach
)