summaryrefslogtreecommitdiff
path: root/src/misc/fetch.ts
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2020-04-12 20:32:34 +0900
committerGitHub <noreply@github.com>2020-04-12 20:32:34 +0900
commit36b9a0d42fa4bd7036d5d4a11203006d0ceb59f0 (patch)
tree6fb00ab7bdf952ebb7e0c6e705fc5837a8022689 /src/misc/fetch.ts
parentResolve #6242 (diff)
downloadsharkey-36b9a0d42fa4bd7036d5d4a11203006d0ceb59f0.tar.gz
sharkey-36b9a0d42fa4bd7036d5d4a11203006d0ceb59f0.tar.bz2
sharkey-36b9a0d42fa4bd7036d5d4a11203006d0ceb59f0.zip
プロキシの除外ホスト (#6244)
* プロキシの除外ホスト * オブジェクトストレージとの通信にProxyを使うかを選択できるように * fix lint * コメント Co-authored-by: rinsuki <428rinsuki+git@gmail.com>
Diffstat (limited to 'src/misc/fetch.ts')
-rw-r--r--src/misc/fetch.ts49
1 files changed, 39 insertions, 10 deletions
diff --git a/src/misc/fetch.ts b/src/misc/fetch.ts
index 887aae1659..358bc25030 100644
--- a/src/misc/fetch.ts
+++ b/src/misc/fetch.ts
@@ -13,7 +13,7 @@ export async function getJson(url: string, accept = 'application/json, */*', tim
Accept: accept
}, headers || {}),
timeout,
- agent: u => u.protocol == 'http:' ? httpAgent : httpsAgent,
+ agent: getAgentByUrl,
});
if (!res.ok) {
@@ -27,17 +27,46 @@ export async function getJson(url: string, accept = 'application/json, */*', tim
return await res.json();
}
+/**
+ * Get http non-proxy agent
+ */
+const _http = new http.Agent({
+ keepAlive: true,
+ keepAliveMsecs: 30 * 1000,
+});
+
+/**
+ * Get https non-proxy agent
+ */
+const _https = new https.Agent({
+ keepAlive: true,
+ keepAliveMsecs: 30 * 1000,
+ lookup: cache.lookup,
+});
+
+/**
+ * Get http proxy or non-proxy agent
+ */
export const httpAgent = config.proxy
? new HttpProxyAgent(config.proxy)
- : new http.Agent({
- keepAlive: true,
- keepAliveMsecs: 30 * 1000,
- });
+ : _http;
+/**
+ * Get https proxy or non-proxy agent
+ */
export const httpsAgent = config.proxy
? new HttpsProxyAgent(config.proxy)
- : new https.Agent({
- keepAlive: true,
- keepAliveMsecs: 30 * 1000,
- lookup: cache.lookup,
- });
+ : _https;
+
+/**
+ * Get agent by URL
+ * @param url URL
+ * @param bypassProxy Allways bypass proxy
+ */
+export function getAgentByUrl(url: URL, bypassProxy = false) {
+ if (bypassProxy || (config.proxyBypassHosts || []).includes(url.hostname)) {
+ return url.protocol == 'http:' ? _http : _https;
+ } else {
+ return url.protocol == 'http:' ? httpAgent : httpsAgent;
+ }
+}