diff options
Diffstat (limited to 'server/helpers/requests.ts')
-rw-r--r-- | server/helpers/requests.ts | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/server/helpers/requests.ts b/server/helpers/requests.ts index 36e69458e..e09e23086 100644 --- a/server/helpers/requests.ts +++ b/server/helpers/requests.ts | |||
@@ -1,19 +1,21 @@ | |||
1 | import { createWriteStream, remove } from 'fs-extra' | 1 | import { createWriteStream, remove } from 'fs-extra' |
2 | import got, { CancelableRequest, Options as GotOptions, RequestError } from 'got' | 2 | import got, { CancelableRequest, Options as GotOptions, RequestError } from 'got' |
3 | import { HttpProxyAgent, HttpsProxyAgent } from 'hpagent' | ||
3 | import { join } from 'path' | 4 | import { join } from 'path' |
4 | import { CONFIG } from '../initializers/config' | 5 | import { CONFIG } from '../initializers/config' |
5 | import { ACTIVITY_PUB, PEERTUBE_VERSION, REQUEST_TIMEOUT, WEBSERVER } from '../initializers/constants' | 6 | import { ACTIVITY_PUB, PEERTUBE_VERSION, REQUEST_TIMEOUT, WEBSERVER } from '../initializers/constants' |
6 | import { pipelinePromise } from './core-utils' | 7 | import { pipelinePromise } from './core-utils' |
7 | import { processImage } from './image-utils' | 8 | import { processImage } from './image-utils' |
8 | import { logger } from './logger' | 9 | import { logger } from './logger' |
10 | import { getProxy, isProxyEnabled } from './proxy' | ||
11 | |||
12 | const httpSignature = require('http-signature') | ||
9 | 13 | ||
10 | export interface PeerTubeRequestError extends Error { | 14 | export interface PeerTubeRequestError extends Error { |
11 | statusCode?: number | 15 | statusCode?: number |
12 | responseBody?: any | 16 | responseBody?: any |
13 | } | 17 | } |
14 | 18 | ||
15 | const httpSignature = require('http-signature') | ||
16 | |||
17 | type PeerTubeRequestOptions = { | 19 | type PeerTubeRequestOptions = { |
18 | activityPub?: boolean | 20 | activityPub?: boolean |
19 | bodyKBLimit?: number // 1MB | 21 | bodyKBLimit?: number // 1MB |
@@ -29,6 +31,8 @@ type PeerTubeRequestOptions = { | |||
29 | } & Pick<GotOptions, 'headers' | 'json' | 'method' | 'searchParams'> | 31 | } & Pick<GotOptions, 'headers' | 'json' | 'method' | 'searchParams'> |
30 | 32 | ||
31 | const peertubeGot = got.extend({ | 33 | const peertubeGot = got.extend({ |
34 | ...getAgent(), | ||
35 | |||
32 | headers: { | 36 | headers: { |
33 | 'user-agent': getUserAgent() | 37 | 'user-agent': getUserAgent() |
34 | }, | 38 | }, |
@@ -153,6 +157,30 @@ async function downloadImage (url: string, destDir: string, destName: string, si | |||
153 | } | 157 | } |
154 | } | 158 | } |
155 | 159 | ||
160 | function getAgent () { | ||
161 | if (!isProxyEnabled()) return {} | ||
162 | |||
163 | const proxy = getProxy() | ||
164 | |||
165 | logger.info('Using proxy %s.', proxy) | ||
166 | |||
167 | const proxyAgentOptions = { | ||
168 | keepAlive: true, | ||
169 | keepAliveMsecs: 1000, | ||
170 | maxSockets: 256, | ||
171 | maxFreeSockets: 256, | ||
172 | scheduling: 'lifo' as 'lifo', | ||
173 | proxy | ||
174 | } | ||
175 | |||
176 | return { | ||
177 | agent: { | ||
178 | http: new HttpProxyAgent(proxyAgentOptions), | ||
179 | https: new HttpsProxyAgent(proxyAgentOptions) | ||
180 | } | ||
181 | } | ||
182 | } | ||
183 | |||
156 | function getUserAgent () { | 184 | function getUserAgent () { |
157 | return `PeerTube/${PEERTUBE_VERSION} (+${WEBSERVER.URL})` | 185 | return `PeerTube/${PEERTUBE_VERSION} (+${WEBSERVER.URL})` |
158 | } | 186 | } |