]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/requests.js
Try to make a better communication (between pods) module
[github/Chocobozzz/PeerTube.git] / server / helpers / requests.js
1 'use strict'
2
3 const config = require('config')
4 const replay = require('request-replay')
5 const request = require('request')
6
7 const constants = require('../initializers/constants')
8 const peertubeCrypto = require('./peertubeCrypto')
9
10 const http = config.get('webserver.https') ? 'https' : 'http'
11 const host = config.get('webserver.host')
12 const port = config.get('webserver.port')
13
14 const requests = {
15 makeRetryRequest: makeRetryRequest,
16 makeSecureRequest: makeSecureRequest
17 }
18
19 function makeRetryRequest (params, callback) {
20 replay(
21 request(params, callback),
22 {
23 retries: constants.RETRY_REQUESTS,
24 factor: 3,
25 maxTimeout: Infinity,
26 errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ]
27 }
28 )
29 }
30
31 function makeSecureRequest (params, callback) {
32 const myUrl = http + '://' + host + ':' + port
33
34 const requestParams = {
35 url: params.toPod.url + params.path
36 }
37
38 // Add data with POST requst ?
39 if (params.method === 'POST') {
40 requestParams.json = {}
41
42 // Add signature if it is specified in the params
43 if (params.sign === true) {
44 requestParams.json.signature = {
45 url: myUrl,
46 signature: peertubeCrypto.sign(myUrl)
47 }
48 }
49
50 // If there are data informations
51 if (params.data) {
52 // Encrypt data
53 if (params.encrypt === true) {
54 peertubeCrypto.encrypt(params.toPod.publicKey, JSON.stringify(params.data), function (err, encrypted) {
55 if (err) return callback(err)
56
57 requestParams.json.data = encrypted.data
58 requestParams.json.key = encrypted.key
59
60 request.post(requestParams, callback)
61 })
62 } else {
63 // No encryption
64 requestParams.json.data = params.data
65 request.post(requestParams, callback)
66 }
67 } else {
68 // No data
69 request.post(requestParams, callback)
70 }
71 } else {
72 request.get(requestParams, callback)
73 }
74 }
75
76 // ---------------------------------------------------------------------------
77
78 module.exports = requests