diff options
author | smilekison <24309222+smilekison@users.noreply.github.com> | 2021-08-25 06:08:37 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-25 15:08:37 +0200 |
commit | 8729a87024fc837f7dd6f13afeec90cf6dda1c06 (patch) | |
tree | 0f6f34966cf7b08d3024a08def4aa547d3aec459 /server/helpers | |
parent | fdec51e3846d50e3375612a6820ed3ab0b5fcd25 (diff) | |
download | PeerTube-8729a87024fc837f7dd6f13afeec90cf6dda1c06.tar.gz PeerTube-8729a87024fc837f7dd6f13afeec90cf6dda1c06.tar.zst PeerTube-8729a87024fc837f7dd6f13afeec90cf6dda1c06.zip |
Support proxies for PeerTube (#4346)
* Updated with latest code
* Updated Support proxies for PeerTube
* Support Proxies for PeerTube (Updated with change request)
* Cleanup proxy PR
Co-authored-by: Chocobozzz <me@florianbigard.com>
Diffstat (limited to 'server/helpers')
-rw-r--r-- | server/helpers/proxy.ts | 14 | ||||
-rw-r--r-- | server/helpers/requests.ts | 32 |
2 files changed, 44 insertions, 2 deletions
diff --git a/server/helpers/proxy.ts b/server/helpers/proxy.ts new file mode 100644 index 000000000..8b82ccae0 --- /dev/null +++ b/server/helpers/proxy.ts | |||
@@ -0,0 +1,14 @@ | |||
1 | function getProxy () { | ||
2 | return process.env.HTTPS_PROXY || | ||
3 | process.env.HTTP_PROXY || | ||
4 | undefined | ||
5 | } | ||
6 | |||
7 | function isProxyEnabled () { | ||
8 | return !!getProxy() | ||
9 | } | ||
10 | |||
11 | export { | ||
12 | getProxy, | ||
13 | isProxyEnabled | ||
14 | } | ||
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 | } |