From 528a9efa8272532bbd0dafc35c3e05e57c50f61e Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Sat, 18 Jun 2016 16:13:54 +0200 Subject: Try to make a better communication (between pods) module --- server/helpers/requests.js | 114 +++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 71 deletions(-) (limited to 'server/helpers/requests.js') diff --git a/server/helpers/requests.js b/server/helpers/requests.js index 1e1bb4111..871342d60 100644 --- a/server/helpers/requests.js +++ b/server/helpers/requests.js @@ -1,12 +1,10 @@ 'use strict' -const async = require('async') const config = require('config') -const request = require('request') const replay = require('request-replay') +const request = require('request') const constants = require('../initializers/constants') -const logger = require('./logger') const peertubeCrypto = require('./peertubeCrypto') const http = config.get('webserver.https') ? 'https' : 'http' @@ -14,93 +12,67 @@ const host = config.get('webserver.host') const port = config.get('webserver.port') const requests = { - makeMultipleRetryRequest: makeMultipleRetryRequest + makeRetryRequest: makeRetryRequest, + makeSecureRequest: makeSecureRequest } -function makeMultipleRetryRequest (allData, pods, callbackEach, callback) { - if (!callback) { - callback = callbackEach - callbackEach = null - } +function makeRetryRequest (params, callback) { + replay( + request(params, callback), + { + retries: constants.RETRY_REQUESTS, + factor: 3, + maxTimeout: Infinity, + errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ] + } + ) +} - const url = http + '://' + host + ':' + port - let signature +function makeSecureRequest (params, callback) { + const myUrl = http + '://' + host + ':' + port - // Add signature if it is specified in the params - if (allData.method === 'POST' && allData.data && allData.sign === true) { - signature = peertubeCrypto.sign(url) + const requestParams = { + url: params.toPod.url + params.path } - // Make a request for each pod - async.each(pods, function (pod, callbackEachAsync) { - function callbackEachRetryRequest (err, response, body, url, pod) { - if (callbackEach !== null) { - callbackEach(err, response, body, url, pod, function () { - callbackEachAsync() - }) - } else { - callbackEachAsync() - } - } + // Add data with POST requst ? + if (params.method === 'POST') { + requestParams.json = {} - const params = { - url: pod.url + allData.path, - method: allData.method + // Add signature if it is specified in the params + if (params.sign === true) { + requestParams.json.signature = { + url: myUrl, + signature: peertubeCrypto.sign(myUrl) + } } - // Add data with POST requst ? - if (allData.method === 'POST' && allData.data) { - // Encrypt data ? - if (allData.encrypt === true) { - peertubeCrypto.encrypt(pod.publicKey, JSON.stringify(allData.data), function (err, encrypted) { + // If there are data informations + if (params.data) { + // Encrypt data + if (params.encrypt === true) { + peertubeCrypto.encrypt(params.toPod.publicKey, JSON.stringify(params.data), function (err, encrypted) { if (err) return callback(err) - params.json = { - data: encrypted.data, - key: encrypted.key - } + requestParams.json.data = encrypted.data + requestParams.json.key = encrypted.key - makeRetryRequest(params, url, pod, signature, callbackEachRetryRequest) + request.post(requestParams, callback) }) } else { - params.json = { data: allData.data } - makeRetryRequest(params, url, pod, signature, callbackEachRetryRequest) + // No encryption + requestParams.json.data = params.data + request.post(requestParams, callback) } } else { - makeRetryRequest(params, url, pod, signature, callbackEachRetryRequest) + // No data + request.post(requestParams, callback) } - }, callback) + } else { + request.get(requestParams, callback) + } } // --------------------------------------------------------------------------- module.exports = requests - -// --------------------------------------------------------------------------- - -function makeRetryRequest (params, fromUrl, toPod, signature, callbackEach) { - // Append the signature - if (signature) { - params.json.signature = { - url: fromUrl, - signature: signature - } - } - - logger.debug('Make retry requests to %s.', toPod.url) - - replay( - request.post(params, function (err, response, body) { - callbackEach(err, response, body, params.url, toPod) - }), - { - retries: constants.REQUEST_RETRIES, - factor: 3, - maxTimeout: Infinity, - errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ] - } - ).on('replay', function (replay) { - logger.info('Replaying request to %s. Request failed: %d %s. Replay number: #%d. Will retry in: %d ms.', - params.url, replay.error.code, replay.error.message, replay.number, replay.delay) - }) -} -- cgit v1.2.3