diff options
Diffstat (limited to 'server/helpers/requests.ts')
-rw-r--r-- | server/helpers/requests.ts | 83 |
1 files changed, 2 insertions, 81 deletions
diff --git a/server/helpers/requests.ts b/server/helpers/requests.ts index 31cedd768..4b1deeadc 100644 --- a/server/helpers/requests.ts +++ b/server/helpers/requests.ts | |||
@@ -1,16 +1,6 @@ | |||
1 | import * as replay from 'request-replay' | ||
2 | import * as request from 'request' | ||
3 | import * as Promise from 'bluebird' | 1 | import * as Promise from 'bluebird' |
4 | |||
5 | import { | ||
6 | RETRY_REQUESTS, | ||
7 | REMOTE_SCHEME, | ||
8 | CONFIG | ||
9 | } from '../initializers' | ||
10 | import { PodInstance } from '../models' | ||
11 | import { PodSignature } from '../../shared' | ||
12 | import { signObject } from './peertube-crypto' | ||
13 | import { createWriteStream } from 'fs' | 2 | import { createWriteStream } from 'fs' |
3 | import * as request from 'request' | ||
14 | 4 | ||
15 | function doRequest (requestOptions: request.CoreOptions & request.UriOptions) { | 5 | function doRequest (requestOptions: request.CoreOptions & request.UriOptions) { |
16 | return new Promise<{ response: request.RequestResponse, body: any }>((res, rej) => { | 6 | return new Promise<{ response: request.RequestResponse, body: any }>((res, rej) => { |
@@ -27,78 +17,9 @@ function doRequestAndSaveToFile (requestOptions: request.CoreOptions & request.U | |||
27 | }) | 17 | }) |
28 | } | 18 | } |
29 | 19 | ||
30 | type MakeRetryRequestParams = { | ||
31 | url: string, | ||
32 | method: 'GET' | 'POST', | ||
33 | json: Object | ||
34 | } | ||
35 | function makeRetryRequest (params: MakeRetryRequestParams) { | ||
36 | return new Promise<{ response: request.RequestResponse, body: any }>((res, rej) => { | ||
37 | replay( | ||
38 | request(params, (err, response, body) => err ? rej(err) : res({ response, body })), | ||
39 | { | ||
40 | retries: RETRY_REQUESTS, | ||
41 | factor: 3, | ||
42 | maxTimeout: Infinity, | ||
43 | errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ] | ||
44 | } | ||
45 | ) | ||
46 | }) | ||
47 | } | ||
48 | |||
49 | type MakeSecureRequestParams = { | ||
50 | toPod: PodInstance | ||
51 | path: string | ||
52 | data?: Object | ||
53 | } | ||
54 | function makeSecureRequest (params: MakeSecureRequestParams) { | ||
55 | const requestParams: { | ||
56 | method: 'POST', | ||
57 | uri: string, | ||
58 | json: { | ||
59 | signature: PodSignature, | ||
60 | data: any | ||
61 | } | ||
62 | } = { | ||
63 | method: 'POST', | ||
64 | uri: REMOTE_SCHEME.HTTP + '://' + params.toPod.host + params.path, | ||
65 | json: { | ||
66 | signature: null, | ||
67 | data: null | ||
68 | } | ||
69 | } | ||
70 | |||
71 | const host = CONFIG.WEBSERVER.HOST | ||
72 | |||
73 | let dataToSign | ||
74 | if (params.data) { | ||
75 | dataToSign = params.data | ||
76 | } else { | ||
77 | // We do not have data to sign so we just take our host | ||
78 | // It is not ideal but the connection should be in HTTPS | ||
79 | dataToSign = host | ||
80 | } | ||
81 | |||
82 | sign(dataToSign).then(signature => { | ||
83 | requestParams.json.signature = { | ||
84 | host, // Which host we pretend to be | ||
85 | signature | ||
86 | } | ||
87 | |||
88 | // If there are data information | ||
89 | if (params.data) { | ||
90 | requestParams.json.data = params.data | ||
91 | } | ||
92 | |||
93 | return doRequest(requestParams) | ||
94 | }) | ||
95 | } | ||
96 | |||
97 | // --------------------------------------------------------------------------- | 20 | // --------------------------------------------------------------------------- |
98 | 21 | ||
99 | export { | 22 | export { |
100 | doRequest, | 23 | doRequest, |
101 | doRequestAndSaveToFile, | 24 | doRequestAndSaveToFile |
102 | makeRetryRequest, | ||
103 | makeSecureRequest | ||
104 | } | 25 | } |