]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/remote.js
Fix videojs vtt
[github/Chocobozzz/PeerTube.git] / server / controllers / api / remote.js
CommitLineData
528a9efa
C
1'use strict'
2
1a42c9e2
C
3const each = require('async/each')
4const eachSeries = require('async/eachSeries')
528a9efa 5const express = require('express')
aaf61f38 6const mongoose = require('mongoose')
528a9efa 7
f253b1c1 8const middlewares = require('../../middlewares')
528a9efa 9const secureMiddleware = middlewares.secure
fc51fde0 10const validators = middlewares.validators.remote
f253b1c1 11const logger = require('../../helpers/logger')
528a9efa
C
12
13const router = express.Router()
aaf61f38 14const Video = mongoose.model('Video')
528a9efa
C
15
16router.post('/videos',
fc51fde0
C
17 validators.signature,
18 validators.dataToDecrypt,
0eb78d53 19 secureMiddleware.checkSignature,
528a9efa 20 secureMiddleware.decryptBody,
fc51fde0 21 validators.remoteVideos,
528a9efa
C
22 remoteVideos
23)
24
25// ---------------------------------------------------------------------------
26
27module.exports = router
28
29// ---------------------------------------------------------------------------
30
31function remoteVideos (req, res, next) {
32 const requests = req.body.data
49abbbbe 33 const fromHost = req.body.signature.host
528a9efa
C
34
35 // We need to process in the same order to keep consistency
36 // TODO: optimization
1a42c9e2 37 eachSeries(requests, function (request, callbackEach) {
aaf61f38 38 const videoData = request.data
528a9efa
C
39
40 if (request.type === 'add') {
aaf61f38 41 addRemoteVideo(videoData, callbackEach)
528a9efa 42 } else if (request.type === 'remove') {
49abbbbe 43 removeRemoteVideo(videoData, fromHost, callbackEach)
6666aad4
C
44 } else {
45 logger.error('Unkown remote request type %s.', request.type)
528a9efa 46 }
aaf61f38
C
47 }, function (err) {
48 if (err) logger.error('Error managing remote videos.', { error: err })
528a9efa
C
49 })
50
51 // We don't need to keep the other pod waiting
52 return res.type('json').status(204).end()
53}
54
aaf61f38 55function addRemoteVideo (videoToCreateData, callback) {
a078c155 56 logger.debug('Adding remote video "%s".', videoToCreateData.name)
6666aad4 57
aaf61f38 58 const video = new Video(videoToCreateData)
c77fa067
C
59 Video.generateThumbnailFromBase64(video, videoToCreateData.thumbnailBase64, function (err) {
60 if (err) {
61 logger.error('Cannot generate thumbnail from base 64 data.', { error: err })
62 return callback(err)
63 }
64
65 video.save(callback)
66 })
528a9efa
C
67}
68
49abbbbe 69function removeRemoteVideo (videoToRemoveData, fromHost, callback) {
528a9efa 70 // We need the list because we have to remove some other stuffs (thumbnail etc)
49abbbbe 71 Video.listByHostAndRemoteId(fromHost, videoToRemoveData.remoteId, function (err, videosList) {
528a9efa 72 if (err) {
49abbbbe 73 logger.error('Cannot list videos from host and magnets.', { error: err })
aaf61f38 74 return callback(err)
528a9efa
C
75 }
76
6666aad4 77 if (videosList.length === 0) {
49abbbbe 78 logger.error('No remote video was found for this pod.', { magnetUri: videoToRemoveData.magnetUri, podHost: fromHost })
6666aad4
C
79 }
80
1a42c9e2 81 each(videosList, function (video, callbackEach) {
6666aad4
C
82 logger.debug('Removing remote video %s.', video.magnetUri)
83
aaf61f38
C
84 video.remove(callbackEach)
85 }, callback)
528a9efa
C
86 })
87}