]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/v1/remote.js
7af9b7e84577b8aae6189c759ffd9e54991cf843
3 const async
= require('async')
4 const express
= require('express')
5 const mongoose
= require('mongoose')
7 const middlewares
= require('../../../middlewares')
8 const secureMiddleware
= middlewares
.secure
9 const validators
= middlewares
.validators
.remote
10 const logger
= require('../../../helpers/logger')
12 const router
= express
.Router()
13 const Video
= mongoose
.model('Video')
15 router
.post('/videos',
17 validators
.dataToDecrypt
,
18 secureMiddleware
.decryptBody
,
19 validators
.remoteVideos
,
23 // ---------------------------------------------------------------------------
25 module
.exports
= router
27 // ---------------------------------------------------------------------------
29 function remoteVideos (req
, res
, next
) {
30 const requests
= req
.body
.data
31 const fromUrl
= req
.body
.signature
.url
33 // We need to process in the same order to keep consistency
35 async
.eachSeries(requests
, function (request
, callbackEach
) {
36 const videoData
= request
.data
38 if (request
.type
=== 'add') {
39 addRemoteVideo(videoData
, callbackEach
)
40 } else if (request
.type
=== 'remove') {
41 removeRemoteVideo(videoData
, fromUrl
, callbackEach
)
44 if (err
) logger
.error('Error managing remote videos.', { error: err
})
47 // We don't need to keep the other pod waiting
48 return res
.type('json').status(204).end()
51 function addRemoteVideo (videoToCreateData
, callback
) {
52 // Mongoose pre hook will automatically create the thumbnail on disk
53 videoToCreateData
.thumbnail
= videoToCreateData
.thumbnailBase64
55 const video
= new Video(videoToCreateData
)
59 function removeRemoteVideo (videoToRemoveData
, fromUrl
, callback
) {
60 // We need the list because we have to remove some other stuffs (thumbnail etc)
61 Video
.listByUrlAndMagnet(fromUrl
, videoToRemoveData
.magnetUri
, function (err
, videosList
) {
63 logger
.error('Cannot list videos from url and magnets.', { error: err
})
67 async
.each(videosList
, function (video
, callbackEach
) {
68 video
.remove(callbackEach
)