]>
Commit | Line | Data |
---|---|---|
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('./peertube-crypto') | |
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 |