diff --git a/app/assets/javascripts/discourse/lib/bootstrap-json/index.js b/app/assets/javascripts/discourse/lib/bootstrap-json/index.js
index ece7a60629d..87342b34d70 100644
--- a/app/assets/javascripts/discourse/lib/bootstrap-json/index.js
+++ b/app/assets/javascripts/discourse/lib/bootstrap-json/index.js
@@ -1,8 +1,7 @@
"use strict";
const express = require("express");
-const bent = require("bent");
-const getJSON = bent("json");
+const fetch = require("node-fetch");
const { encode } = require("html-entities");
const cleanBaseURL = require("clean-base-url");
const path = require("path");
@@ -123,7 +122,9 @@ function bodyFooter(buffer, bootstrap, headers) {
let v = generateUID();
buffer.push(`
-
+
`);
}
@@ -175,7 +176,7 @@ async function applyBootstrap(bootstrap, template, response, baseURL) {
}
Object.keys(BUILDERS).forEach((id) => {
- template = replaceIn(bootstrap, template, id, response, baseURL);
+ template = replaceIn(bootstrap, template, id, response.headers, baseURL);
});
return template;
}
@@ -193,7 +194,8 @@ async function buildFromBootstrap(proxy, baseURL, req, response) {
url += req.url.substr(queryLoc);
}
- const json = await getJSON(url, null, req.headers);
+ const res = await fetch(url, { headers: req.headers });
+ const json = await res.json();
return applyBootstrap(json.bootstrap, template, response, baseURL);
} catch (error) {
@@ -230,33 +232,24 @@ async function handleRequest(proxy, baseURL, req, res) {
req.headers["X-Discourse-Asset-Path"] = req.path;
}
- const acceptedStatusCodes = [
- 200,
- 201,
- 301,
- 302,
- 303,
- 307,
- 308,
- 404,
- 403,
- 422,
- 500,
- ];
- const proxyRequest = bent(req.method, acceptedStatusCodes);
- const requestBody = req.method === "GET" ? null : req.body;
- const response = await proxyRequest(url, requestBody, req.headers);
+ const response = await fetch(url, {
+ method: req.method,
+ body: /GET|HEAD/.test(req.method) ? null : req.body,
+ headers: req.headers,
+ });
- res.set(response.headers);
+ response.headers.forEach((value, header) => {
+ res.set(header, value);
+ });
res.set("content-encoding", null);
- const { location } = response.headers;
+ const location = response.headers.get("location");
if (location) {
const newLocation = location.replace(proxy, `http://${originalHost}`);
res.set("location", newLocation);
}
- const csp = response.headers["content-security-policy"];
+ const csp = response.headers.get("content-security-policy");
if (csp) {
const newCSP = csp.replace(
new RegExp(proxy, "g"),
@@ -265,7 +258,7 @@ async function handleRequest(proxy, baseURL, req, res) {
res.set("content-security-policy", newCSP);
}
- if (response.headers["x-discourse-bootstrap-required"] === "true") {
+ if (response.headers.get("x-discourse-bootstrap-required") === "true") {
const html = await buildFromBootstrap(proxy, baseURL, req, response);
res.set("content-type", "text/html");
res.send(html);
diff --git a/app/assets/javascripts/discourse/package.json b/app/assets/javascripts/discourse/package.json
index ef1539fb101..59735ab5714 100644
--- a/app/assets/javascripts/discourse/package.json
+++ b/app/assets/javascripts/discourse/package.json
@@ -29,7 +29,6 @@
"@uppy/utils": "^4.0.3",
"@uppy/xhr-upload": "^2.0.4",
"admin": "^1.0.0",
- "bent": "^7.3.12",
"broccoli-asset-rev": "^3.0.0",
"deepmerge": "^4.2.2",
"discourse-common": "^1.0.0",
@@ -58,6 +57,7 @@
"loader.js": "^4.7.0",
"message-bus-client": "^3.3.0",
"messageformat": "0.1.5",
+ "node-fetch": "^2.6.6",
"pretender": "^3.4.7",
"pretty-text": "^1.0.0",
"qunit": "^2.14.0",
diff --git a/app/assets/javascripts/yarn.lock b/app/assets/javascripts/yarn.lock
index 333a1e7f5e2..7be414245a5 100644
--- a/app/assets/javascripts/yarn.lock
+++ b/app/assets/javascripts/yarn.lock
@@ -2814,15 +2814,6 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
-bent@^7.3.12:
- version "7.3.12"
- resolved "https://registry.yarnpkg.com/bent/-/bent-7.3.12.tgz#e0a2775d4425e7674c64b78b242af4f49da6b035"
- integrity sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==
- dependencies:
- bytesish "^0.4.1"
- caseless "~0.12.0"
- is-stream "^2.0.0"
-
big.js@^5.2.2:
version "5.2.2"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
@@ -3696,11 +3687,6 @@ bytes@3.1.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
-bytesish@^0.4.1:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/bytesish/-/bytesish-0.4.4.tgz#f3b535a0f1153747427aee27256748cff92347e6"
- integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==
-
cacache@^12.0.2:
version "12.0.4"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
@@ -4471,14 +4457,7 @@ debug@^3.0.1, debug@^3.1.0, debug@^3.1.1:
dependencies:
ms "^2.1.1"
-debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
- integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
- dependencies:
- ms "2.1.2"
-
-debug@^4.2.0:
+debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
@@ -4829,40 +4808,7 @@ ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.6.0:
ember-cli-version-checker "^2.1.2"
semver "^5.5.0"
-ember-cli-babel@^7.0.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.26.2, ember-cli-babel@^7.7.3:
- version "7.26.3"
- resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.26.3.tgz#e93ce7ec458208894d10844cf76e41cc06fdbeb6"
- integrity sha512-ZCs0g99d3kYaHs1+HT33oMY7/K+nLCAAv7dCLxsMzg7cQf55O6Pq4ZKnWEr3IHVs33xbJFnEb9prt1up36QVnw==
- dependencies:
- "@babel/core" "^7.12.0"
- "@babel/helper-compilation-targets" "^7.12.0"
- "@babel/plugin-proposal-class-properties" "^7.13.0"
- "@babel/plugin-proposal-decorators" "^7.13.5"
- "@babel/plugin-transform-modules-amd" "^7.13.0"
- "@babel/plugin-transform-runtime" "^7.13.9"
- "@babel/plugin-transform-typescript" "^7.13.0"
- "@babel/polyfill" "^7.11.5"
- "@babel/preset-env" "^7.12.0"
- "@babel/runtime" "7.12.18"
- amd-name-resolver "^1.3.1"
- babel-plugin-debug-macros "^0.3.4"
- babel-plugin-ember-data-packages-polyfill "^0.1.2"
- babel-plugin-ember-modules-api-polyfill "^3.5.0"
- babel-plugin-module-resolver "^3.2.0"
- broccoli-babel-transpiler "^7.8.0"
- broccoli-debug "^0.6.4"
- broccoli-funnel "^2.0.2"
- broccoli-source "^2.1.2"
- clone "^2.1.2"
- ember-cli-babel-plugin-helpers "^1.1.1"
- ember-cli-version-checker "^4.1.0"
- ensure-posix-path "^1.0.2"
- fixturify-project "^1.10.0"
- resolve-package-path "^3.1.0"
- rimraf "^3.0.1"
- semver "^5.5.0"
-
-ember-cli-babel@^7.21.0, ember-cli-babel@^7.26.4:
+ember-cli-babel@^7.0.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.26.2, ember-cli-babel@^7.26.4, ember-cli-babel@^7.7.3:
version "7.26.6"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.26.6.tgz#322fbbd3baad9dd99e3276ff05bc6faef5e54b39"
integrity sha512-040svtfj2RC35j/WMwdWJFusZaXmNoytLAMyBDGLMSlRvznudTxZjGlPV6UupmtTBApy58cEF8Fq4a+COWoEmQ==
@@ -8857,10 +8803,12 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
-node-fetch@^2.6.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
- integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
+node-fetch@^2.6.0, node-fetch@^2.6.6:
+ version "2.6.6"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
+ integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==
+ dependencies:
+ whatwg-url "^5.0.0"
node-int64@^0.4.0:
version "0.4.0"
@@ -11324,6 +11272,11 @@ tr46@^2.0.2:
dependencies:
punycode "^2.1.1"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+
tree-sync@^1.2.2:
version "1.4.0"
resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6"
@@ -11817,6 +11770,11 @@ wcwidth@^1.0.1:
dependencies:
defaults "^1.0.3"
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
+
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
@@ -11890,6 +11848,14 @@ whatwg-mimetype@^2.3.0:
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
whatwg-url@^8.0.0, whatwg-url@^8.5.0:
version "8.5.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3"