aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/controllers/api/remote
diff options
context:
space:
mode:
Diffstat (limited to 'server/controllers/api/remote')
-rw-r--r--server/controllers/api/remote/index.js18
-rw-r--r--server/controllers/api/remote/index.ts18
-rw-r--r--server/controllers/api/remote/pods.ts (renamed from server/controllers/api/remote/pods.js)20
-rw-r--r--server/controllers/api/remote/videos.ts (renamed from server/controllers/api/remote/videos.js)122
4 files changed, 94 insertions, 84 deletions
diff --git a/server/controllers/api/remote/index.js b/server/controllers/api/remote/index.js
deleted file mode 100644
index 6106850ab..000000000
--- a/server/controllers/api/remote/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
1'use strict'
2
3const express = require('express')
4
5const utils = require('../../../helpers/utils')
6
7const router = express.Router()
8
9const podsRemoteController = require('./pods')
10const videosRemoteController = require('./videos')
11
12router.use('/pods', podsRemoteController)
13router.use('/videos', videosRemoteController)
14router.use('/*', utils.badRequest)
15
16// ---------------------------------------------------------------------------
17
18module.exports = router
diff --git a/server/controllers/api/remote/index.ts b/server/controllers/api/remote/index.ts
new file mode 100644
index 000000000..b11439204
--- /dev/null
+++ b/server/controllers/api/remote/index.ts
@@ -0,0 +1,18 @@
1import express = require('express')
2
3import { badRequest } from '../../../helpers'
4
5import { remotePodsRouter } from './pods'
6import { remoteVideosRouter } from './videos'
7
8const remoteRouter = express.Router()
9
10remoteRouter.use('/pods', remotePodsRouter)
11remoteRouter.use('/videos', remoteVideosRouter)
12remoteRouter.use('/*', badRequest)
13
14// ---------------------------------------------------------------------------
15
16export {
17 remoteRouter
18}
diff --git a/server/controllers/api/remote/pods.js b/server/controllers/api/remote/pods.ts
index 0343bc62e..85ef7bb42 100644
--- a/server/controllers/api/remote/pods.js
+++ b/server/controllers/api/remote/pods.ts
@@ -1,25 +1,23 @@
1'use strict' 1import express = require('express')
2 2import { waterfall } from 'async/waterfall'
3const express = require('express')
4const waterfall = require('async/waterfall')
5 3
6const db = require('../../../initializers/database') 4const db = require('../../../initializers/database')
7const middlewares = require('../../../middlewares') 5import { checkSignature, signatureValidator } from '../../../middlewares'
8const checkSignature = middlewares.secure.checkSignature
9const signatureValidator = middlewares.validators.remote.signature
10 6
11const router = express.Router() 7const remotePodsRouter = express.Router()
12 8
13// Post because this is a secured request 9// Post because this is a secured request
14router.post('/remove', 10remotePodsRouter.post('/remove',
15 signatureValidator.signature, 11 signatureValidator,
16 checkSignature, 12 checkSignature,
17 removePods 13 removePods
18) 14)
19 15
20// --------------------------------------------------------------------------- 16// ---------------------------------------------------------------------------
21 17
22module.exports = router 18export {
19 remotePodsRouter
20}
23 21
24// --------------------------------------------------------------------------- 22// ---------------------------------------------------------------------------
25 23
diff --git a/server/controllers/api/remote/videos.js b/server/controllers/api/remote/videos.ts
index e54793628..df4ba8309 100644
--- a/server/controllers/api/remote/videos.js
+++ b/server/controllers/api/remote/videos.ts
@@ -1,20 +1,30 @@
1'use strict' 1import express = require('express')
2 2import { eachSeries, waterfall } from 'async'
3const eachSeries = require('async/eachSeries')
4const express = require('express')
5const waterfall = require('async/waterfall')
6 3
7const db = require('../../../initializers/database') 4const db = require('../../../initializers/database')
8const constants = require('../../../initializers/constants') 5import {
9const middlewares = require('../../../middlewares') 6 REQUEST_ENDPOINT_ACTIONS,
10const secureMiddleware = middlewares.secure 7 REQUEST_ENDPOINTS,
11const videosValidators = middlewares.validators.remote.videos 8 REQUEST_VIDEO_EVENT_TYPES,
12const signatureValidators = middlewares.validators.remote.signature 9 REQUEST_VIDEO_QADU_TYPES
13const logger = require('../../../helpers/logger') 10} from '../../../initializers'
14const friends = require('../../../lib/friends') 11import {
15const databaseUtils = require('../../../helpers/database-utils') 12 checkSignature,
16 13 signatureValidator,
17const ENDPOINT_ACTIONS = constants.REQUEST_ENDPOINT_ACTIONS[constants.REQUEST_ENDPOINTS.VIDEOS] 14 remoteVideosValidator,
15 remoteQaduVideosValidator,
16 remoteEventsVideosValidator
17} from '../../../middlewares'
18import {
19 logger,
20 commitTransaction,
21 retryTransactionWrapper,
22 rollbackTransaction,
23 startSerializableTransaction
24} from '../../../helpers'
25import { quickAndDirtyUpdatesVideoToFriends } from '../../../lib'
26
27const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS]
18 28
19// Functions to call when processing a remote request 29// Functions to call when processing a remote request
20const functionsHash = {} 30const functionsHash = {}
@@ -23,32 +33,34 @@ functionsHash[ENDPOINT_ACTIONS.UPDATE] = updateRemoteVideoRetryWrapper
23functionsHash[ENDPOINT_ACTIONS.REMOVE] = removeRemoteVideo 33functionsHash[ENDPOINT_ACTIONS.REMOVE] = removeRemoteVideo
24functionsHash[ENDPOINT_ACTIONS.REPORT_ABUSE] = reportAbuseRemoteVideo 34functionsHash[ENDPOINT_ACTIONS.REPORT_ABUSE] = reportAbuseRemoteVideo
25 35
26const router = express.Router() 36const remoteVideosRouter = express.Router()
27 37
28router.post('/', 38remoteVideosRouter.post('/',
29 signatureValidators.signature, 39 signatureValidator,
30 secureMiddleware.checkSignature, 40 checkSignature,
31 videosValidators.remoteVideos, 41 remoteVideosValidator,
32 remoteVideos 42 remoteVideos
33) 43)
34 44
35router.post('/qadu', 45remoteVideosRouter.post('/qadu',
36 signatureValidators.signature, 46 signatureValidator,
37 secureMiddleware.checkSignature, 47 checkSignature,
38 videosValidators.remoteQaduVideos, 48 remoteQaduVideosValidator,
39 remoteVideosQadu 49 remoteVideosQadu
40) 50)
41 51
42router.post('/events', 52remoteVideosRouter.post('/events',
43 signatureValidators.signature, 53 signatureValidator,
44 secureMiddleware.checkSignature, 54 checkSignature,
45 videosValidators.remoteEventsVideos, 55 remoteEventsVideosValidator,
46 remoteVideosEvents 56 remoteVideosEvents
47) 57)
48 58
49// --------------------------------------------------------------------------- 59// ---------------------------------------------------------------------------
50 60
51module.exports = router 61export {
62 remoteVideosRouter
63}
52 64
53// --------------------------------------------------------------------------- 65// ---------------------------------------------------------------------------
54 66
@@ -58,7 +70,7 @@ function remoteVideos (req, res, next) {
58 70
59 // We need to process in the same order to keep consistency 71 // We need to process in the same order to keep consistency
60 // TODO: optimization 72 // TODO: optimization
61 eachSeries(requests, function (request, callbackEach) { 73 eachSeries(requests, function (request: any, callbackEach) {
62 const data = request.data 74 const data = request.data
63 75
64 // Get the function we need to call in order to process the request 76 // Get the function we need to call in order to process the request
@@ -81,7 +93,7 @@ function remoteVideosQadu (req, res, next) {
81 const requests = req.body.data 93 const requests = req.body.data
82 const fromPod = res.locals.secure.pod 94 const fromPod = res.locals.secure.pod
83 95
84 eachSeries(requests, function (request, callbackEach) { 96 eachSeries(requests, function (request: any, callbackEach) {
85 const videoData = request.data 97 const videoData = request.data
86 98
87 quickAndDirtyUpdateVideoRetryWrapper(videoData, fromPod, callbackEach) 99 quickAndDirtyUpdateVideoRetryWrapper(videoData, fromPod, callbackEach)
@@ -96,7 +108,7 @@ function remoteVideosEvents (req, res, next) {
96 const requests = req.body.data 108 const requests = req.body.data
97 const fromPod = res.locals.secure.pod 109 const fromPod = res.locals.secure.pod
98 110
99 eachSeries(requests, function (request, callbackEach) { 111 eachSeries(requests, function (request: any, callbackEach) {
100 const eventData = request.data 112 const eventData = request.data
101 113
102 processVideosEventsRetryWrapper(eventData, fromPod, callbackEach) 114 processVideosEventsRetryWrapper(eventData, fromPod, callbackEach)
@@ -113,12 +125,12 @@ function processVideosEventsRetryWrapper (eventData, fromPod, finalCallback) {
113 errorMessage: 'Cannot process videos events with many retries.' 125 errorMessage: 'Cannot process videos events with many retries.'
114 } 126 }
115 127
116 databaseUtils.retryTransactionWrapper(processVideosEvents, options, finalCallback) 128 retryTransactionWrapper(processVideosEvents, options, finalCallback)
117} 129}
118 130
119function processVideosEvents (eventData, fromPod, finalCallback) { 131function processVideosEvents (eventData, fromPod, finalCallback) {
120 waterfall([ 132 waterfall([
121 databaseUtils.startSerializableTransaction, 133 startSerializableTransaction,
122 134
123 function findVideo (t, callback) { 135 function findVideo (t, callback) {
124 fetchOwnedVideo(eventData.remoteId, function (err, videoInstance) { 136 fetchOwnedVideo(eventData.remoteId, function (err, videoInstance) {
@@ -133,19 +145,19 @@ function processVideosEvents (eventData, fromPod, finalCallback) {
133 let qaduType 145 let qaduType
134 146
135 switch (eventData.eventType) { 147 switch (eventData.eventType) {
136 case constants.REQUEST_VIDEO_EVENT_TYPES.VIEWS: 148 case REQUEST_VIDEO_EVENT_TYPES.VIEWS:
137 columnToUpdate = 'views' 149 columnToUpdate = 'views'
138 qaduType = constants.REQUEST_VIDEO_QADU_TYPES.VIEWS 150 qaduType = REQUEST_VIDEO_QADU_TYPES.VIEWS
139 break 151 break
140 152
141 case constants.REQUEST_VIDEO_EVENT_TYPES.LIKES: 153 case REQUEST_VIDEO_EVENT_TYPES.LIKES:
142 columnToUpdate = 'likes' 154 columnToUpdate = 'likes'
143 qaduType = constants.REQUEST_VIDEO_QADU_TYPES.LIKES 155 qaduType = REQUEST_VIDEO_QADU_TYPES.LIKES
144 break 156 break
145 157
146 case constants.REQUEST_VIDEO_EVENT_TYPES.DISLIKES: 158 case REQUEST_VIDEO_EVENT_TYPES.DISLIKES:
147 columnToUpdate = 'dislikes' 159 columnToUpdate = 'dislikes'
148 qaduType = constants.REQUEST_VIDEO_QADU_TYPES.DISLIKES 160 qaduType = REQUEST_VIDEO_QADU_TYPES.DISLIKES
149 break 161 break
150 162
151 default: 163 default:
@@ -168,17 +180,17 @@ function processVideosEvents (eventData, fromPod, finalCallback) {
168 } 180 }
169 ] 181 ]
170 182
171 friends.quickAndDirtyUpdatesVideoToFriends(qadusParams, t, function (err) { 183 quickAndDirtyUpdatesVideoToFriends(qadusParams, t, function (err) {
172 return callback(err, t) 184 return callback(err, t)
173 }) 185 })
174 }, 186 },
175 187
176 databaseUtils.commitTransaction 188 commitTransaction
177 189
178 ], function (err, t) { 190 ], function (err, t) {
179 if (err) { 191 if (err) {
180 logger.debug('Cannot process a video event.', { error: err }) 192 logger.debug('Cannot process a video event.', { error: err })
181 return databaseUtils.rollbackTransaction(err, t, finalCallback) 193 return rollbackTransaction(err, t, finalCallback)
182 } 194 }
183 195
184 logger.info('Remote video event processed for video %s.', eventData.remoteId) 196 logger.info('Remote video event processed for video %s.', eventData.remoteId)
@@ -192,14 +204,14 @@ function quickAndDirtyUpdateVideoRetryWrapper (videoData, fromPod, finalCallback
192 errorMessage: 'Cannot update quick and dirty the remote video with many retries.' 204 errorMessage: 'Cannot update quick and dirty the remote video with many retries.'
193 } 205 }
194 206
195 databaseUtils.retryTransactionWrapper(quickAndDirtyUpdateVideo, options, finalCallback) 207 retryTransactionWrapper(quickAndDirtyUpdateVideo, options, finalCallback)
196} 208}
197 209
198function quickAndDirtyUpdateVideo (videoData, fromPod, finalCallback) { 210function quickAndDirtyUpdateVideo (videoData, fromPod, finalCallback) {
199 let videoName 211 let videoName
200 212
201 waterfall([ 213 waterfall([
202 databaseUtils.startSerializableTransaction, 214 startSerializableTransaction,
203 215
204 function findVideo (t, callback) { 216 function findVideo (t, callback) {
205 fetchRemoteVideo(fromPod.host, videoData.remoteId, function (err, videoInstance) { 217 fetchRemoteVideo(fromPod.host, videoData.remoteId, function (err, videoInstance) {
@@ -229,12 +241,12 @@ function quickAndDirtyUpdateVideo (videoData, fromPod, finalCallback) {
229 }) 241 })
230 }, 242 },
231 243
232 databaseUtils.commitTransaction 244 commitTransaction
233 245
234 ], function (err, t) { 246 ], function (err, t) {
235 if (err) { 247 if (err) {
236 logger.debug('Cannot quick and dirty update the remote video.', { error: err }) 248 logger.debug('Cannot quick and dirty update the remote video.', { error: err })
237 return databaseUtils.rollbackTransaction(err, t, finalCallback) 249 return rollbackTransaction(err, t, finalCallback)
238 } 250 }
239 251
240 logger.info('Remote video %s quick and dirty updated', videoName) 252 logger.info('Remote video %s quick and dirty updated', videoName)
@@ -249,7 +261,7 @@ function addRemoteVideoRetryWrapper (videoToCreateData, fromPod, finalCallback)
249 errorMessage: 'Cannot insert the remote video with many retries.' 261 errorMessage: 'Cannot insert the remote video with many retries.'
250 } 262 }
251 263
252 databaseUtils.retryTransactionWrapper(addRemoteVideo, options, finalCallback) 264 retryTransactionWrapper(addRemoteVideo, options, finalCallback)
253} 265}
254 266
255function addRemoteVideo (videoToCreateData, fromPod, finalCallback) { 267function addRemoteVideo (videoToCreateData, fromPod, finalCallback) {
@@ -257,7 +269,7 @@ function addRemoteVideo (videoToCreateData, fromPod, finalCallback) {
257 269
258 waterfall([ 270 waterfall([
259 271
260 databaseUtils.startSerializableTransaction, 272 startSerializableTransaction,
261 273
262 function assertRemoteIdAndHostUnique (t, callback) { 274 function assertRemoteIdAndHostUnique (t, callback) {
263 db.Video.loadByHostAndRemoteId(fromPod.host, videoToCreateData.remoteId, function (err, video) { 275 db.Video.loadByHostAndRemoteId(fromPod.host, videoToCreateData.remoteId, function (err, video) {
@@ -345,13 +357,13 @@ function addRemoteVideo (videoToCreateData, fromPod, finalCallback) {
345 }) 357 })
346 }, 358 },
347 359
348 databaseUtils.commitTransaction 360 commitTransaction
349 361
350 ], function (err, t) { 362 ], function (err, t) {
351 if (err) { 363 if (err) {
352 // This is just a debug because we will retry the insert 364 // This is just a debug because we will retry the insert
353 logger.debug('Cannot insert the remote video.', { error: err }) 365 logger.debug('Cannot insert the remote video.', { error: err })
354 return databaseUtils.rollbackTransaction(err, t, finalCallback) 366 return rollbackTransaction(err, t, finalCallback)
355 } 367 }
356 368
357 logger.info('Remote video %s inserted.', videoToCreateData.name) 369 logger.info('Remote video %s inserted.', videoToCreateData.name)
@@ -366,7 +378,7 @@ function updateRemoteVideoRetryWrapper (videoAttributesToUpdate, fromPod, finalC
366 errorMessage: 'Cannot update the remote video with many retries' 378 errorMessage: 'Cannot update the remote video with many retries'
367 } 379 }
368 380
369 databaseUtils.retryTransactionWrapper(updateRemoteVideo, options, finalCallback) 381 retryTransactionWrapper(updateRemoteVideo, options, finalCallback)
370} 382}
371 383
372function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) { 384function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) {
@@ -374,7 +386,7 @@ function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) {
374 386
375 waterfall([ 387 waterfall([
376 388
377 databaseUtils.startSerializableTransaction, 389 startSerializableTransaction,
378 390
379 function findVideo (t, callback) { 391 function findVideo (t, callback) {
380 fetchRemoteVideo(fromPod.host, videoAttributesToUpdate.remoteId, function (err, videoInstance) { 392 fetchRemoteVideo(fromPod.host, videoAttributesToUpdate.remoteId, function (err, videoInstance) {
@@ -421,13 +433,13 @@ function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) {
421 }) 433 })
422 }, 434 },
423 435
424 databaseUtils.commitTransaction 436 commitTransaction
425 437
426 ], function (err, t) { 438 ], function (err, t) {
427 if (err) { 439 if (err) {
428 // This is just a debug because we will retry the insert 440 // This is just a debug because we will retry the insert
429 logger.debug('Cannot update the remote video.', { error: err }) 441 logger.debug('Cannot update the remote video.', { error: err })
430 return databaseUtils.rollbackTransaction(err, t, finalCallback) 442 return rollbackTransaction(err, t, finalCallback)
431 } 443 }
432 444
433 logger.info('Remote video %s updated', videoAttributesToUpdate.name) 445 logger.info('Remote video %s updated', videoAttributesToUpdate.name)