]>
Commit | Line | Data |
---|---|---|
9f10b292 | 1 | 'use strict' |
dac0a531 | 2 | |
f0f5567b | 3 | const config = require('config') |
f0f5567b | 4 | const replay = require('request-replay') |
528a9efa | 5 | const request = require('request') |
dac0a531 | 6 | |
f0f5567b | 7 | const constants = require('../initializers/constants') |
5f698b82 | 8 | const peertubeCrypto = require('./peertube-crypto') |
dac0a531 | 9 | |
f0f5567b C |
10 | const http = config.get('webserver.https') ? 'https' : 'http' |
11 | const host = config.get('webserver.host') | |
12 | const port = config.get('webserver.port') | |
dac0a531 | 13 | |
f0f5567b | 14 | const requests = { |
528a9efa C |
15 | makeRetryRequest: makeRetryRequest, |
16 | makeSecureRequest: makeSecureRequest | |
9f10b292 | 17 | } |
dac0a531 | 18 | |
528a9efa C |
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 | } | |
dac0a531 | 30 | |
528a9efa C |
31 | function makeSecureRequest (params, callback) { |
32 | const myUrl = http + '://' + host + ':' + port | |
dac0a531 | 33 | |
528a9efa C |
34 | const requestParams = { |
35 | url: params.toPod.url + params.path | |
9f10b292 | 36 | } |
dac0a531 | 37 | |
528a9efa C |
38 | // Add data with POST requst ? |
39 | if (params.method === 'POST') { | |
40 | requestParams.json = {} | |
dac0a531 | 41 | |
528a9efa C |
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 | } | |
9f10b292 | 48 | } |
dac0a531 | 49 | |
528a9efa C |
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) { | |
f0f5567b | 55 | if (err) return callback(err) |
9f10b292 | 56 | |
528a9efa C |
57 | requestParams.json.data = encrypted.data |
58 | requestParams.json.key = encrypted.key | |
9f10b292 | 59 | |
528a9efa | 60 | request.post(requestParams, callback) |
f0f5567b | 61 | }) |
dac0a531 | 62 | } else { |
528a9efa C |
63 | // No encryption |
64 | requestParams.json.data = params.data | |
65 | request.post(requestParams, callback) | |
dac0a531 | 66 | } |
9f10b292 | 67 | } else { |
528a9efa C |
68 | // No data |
69 | request.post(requestParams, callback) | |
9f10b292 | 70 | } |
528a9efa C |
71 | } else { |
72 | request.get(requestParams, callback) | |
73 | } | |
9f10b292 | 74 | } |
dac0a531 | 75 | |
9f10b292 | 76 | // --------------------------------------------------------------------------- |
dac0a531 | 77 | |
9f10b292 | 78 | module.exports = requests |