From e82e625b51acdef9e97b1192dce86d2e226ea226 Mon Sep 17 00:00:00 2001 From: Connor White Date: Sat, 31 Aug 2019 22:16:36 -0500 Subject: [PATCH 1/5] OutgoingMessage.prototype._headers is deprecated in Node.js 12 --- app/steps/decorateUserResHeaders.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/steps/decorateUserResHeaders.js b/app/steps/decorateUserResHeaders.js index efd6f357..3f98ef2c 100644 --- a/app/steps/decorateUserResHeaders.js +++ b/app/steps/decorateUserResHeaders.js @@ -3,7 +3,7 @@ function decorateUserResHeaders(container) { var resolverFn = container.options.userResHeaderDecorator; - var headers = container.user.res._headers; + var headers = container.user.res.getHeaders(); if (!resolverFn) { return Promise.resolve(container); From 6359c95ca1405a1669da3eac6c0920b0506b88be Mon Sep 17 00:00:00 2001 From: Connor White Date: Sat, 31 Aug 2019 22:38:57 -0500 Subject: [PATCH 2/5] make sure res.getHeaders() exists for Node 6 --- app/steps/decorateUserResHeaders.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/steps/decorateUserResHeaders.js b/app/steps/decorateUserResHeaders.js index 3f98ef2c..17fbaa79 100644 --- a/app/steps/decorateUserResHeaders.js +++ b/app/steps/decorateUserResHeaders.js @@ -3,7 +3,7 @@ function decorateUserResHeaders(container) { var resolverFn = container.options.userResHeaderDecorator; - var headers = container.user.res.getHeaders(); + var headers = container.user.res.getHeaders ? container.user.res.getHeaders() : container.user.res._headers; if (!resolverFn) { return Promise.resolve(container); From d4e63104469b289c479c1a4aee711b5988638e71 Mon Sep 17 00:00:00 2001 From: Connor White Date: Sat, 31 Aug 2019 23:41:07 -0500 Subject: [PATCH 3/5] Allow for async host functions --- app/steps/resolveProxyHost.js | 4 ++-- lib/requestOptions.js | 4 ++-- package-lock.json | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/steps/resolveProxyHost.js b/app/steps/resolveProxyHost.js index 181dda7a..eef139d2 100644 --- a/app/steps/resolveProxyHost.js +++ b/app/steps/resolveProxyHost.js @@ -1,13 +1,13 @@ 'use strict'; var requestOptions = require('../../lib/requestOptions'); -function resolveProxyHost(container) { +async function resolveProxyHost(container) { var parsedHost; if (container.options.memoizeHost && container.options.memoizedHost) { parsedHost = container.options.memoizedHost; } else { - parsedHost = requestOptions.parseHost(container); + parsedHost = await requestOptions.parseHost(container); } container.proxy.reqBuilder.host = parsedHost.host; diff --git a/lib/requestOptions.js b/lib/requestOptions.js index 59b8af60..4686662a 100644 --- a/lib/requestOptions.js +++ b/lib/requestOptions.js @@ -20,11 +20,11 @@ function extend(obj, source, skips) { return obj; } -function parseHost(Container) { +async function parseHost(Container) { var host = Container.params.host; var req = Container.user.req; var options = Container.options; - host = (typeof host === 'function') ? host(req) : host.toString(); + host = (typeof host === 'function') ? await host(req) : host.toString(); if (!host) { return new Error('Empty host parameter'); diff --git a/package-lock.json b/package-lock.json index b5d4e1ba..16f46076 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1135,9 +1135,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -1167,9 +1167,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lru-cache": { From b7c7207058368d90aac708aa420aaa5c03896a28 Mon Sep 17 00:00:00 2001 From: Connor White Date: Sat, 31 Aug 2019 23:41:53 -0500 Subject: [PATCH 4/5] Another res._headers --- test/userResDecorator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/userResDecorator.js b/test/userResDecorator.js index 150b6a3e..b500ca5d 100644 --- a/test/userResDecorator.js +++ b/test/userResDecorator.js @@ -160,7 +160,7 @@ describe('userResDecorator', function () { proxyApp.use(proxy(redirectingServerOrigin, { userResDecorator: function (rsp, data, req, res) { - var proxyReturnedLocation = res._headers.location; + var proxyReturnedLocation = res.getHeaders ? res.getHeaders().location : res._headers.location; res.location(proxyReturnedLocation.replace(redirectingServerPort, preferredPort)); return data; } From dc9013058cd38f115c760367e9820a3c075e11cb Mon Sep 17 00:00:00 2001 From: Connor White Date: Sun, 1 Sep 2019 10:31:02 -0500 Subject: [PATCH 5/5] Node 6 support for async getHost --- app/steps/resolveProxyHost.js | 14 ++++++++------ lib/requestOptions.js | 32 +++++++++++++++++--------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/app/steps/resolveProxyHost.js b/app/steps/resolveProxyHost.js index eef139d2..11bd4a0d 100644 --- a/app/steps/resolveProxyHost.js +++ b/app/steps/resolveProxyHost.js @@ -1,19 +1,21 @@ 'use strict'; var requestOptions = require('../../lib/requestOptions'); -async function resolveProxyHost(container) { +function resolveProxyHost(container) { var parsedHost; if (container.options.memoizeHost && container.options.memoizedHost) { parsedHost = container.options.memoizedHost; } else { - parsedHost = await requestOptions.parseHost(container); + parsedHost = requestOptions.parseHost(container); } - container.proxy.reqBuilder.host = parsedHost.host; - container.proxy.reqBuilder.port = container.options.port || parsedHost.port; - container.proxy.requestModule = parsedHost.module; - return Promise.resolve(container); + return Promise.resolve(parsedHost).then((parsedHost) => { + container.proxy.reqBuilder.host = parsedHost.host; + container.proxy.reqBuilder.port = container.options.port || parsedHost.port; + container.proxy.requestModule = parsedHost.module; + return Promise.resolve(container); + }); } module.exports = resolveProxyHost; diff --git a/lib/requestOptions.js b/lib/requestOptions.js index 4686662a..d83ce93f 100644 --- a/lib/requestOptions.js +++ b/lib/requestOptions.js @@ -20,33 +20,35 @@ function extend(obj, source, skips) { return obj; } -async function parseHost(Container) { +function parseHost(Container) { var host = Container.params.host; var req = Container.user.req; var options = Container.options; - host = (typeof host === 'function') ? await host(req) : host.toString(); + host = (typeof host === 'function') ? host(req) : host.toString(); if (!host) { return new Error('Empty host parameter'); } - if (!/http(s)?:\/\//.test(host)) { - host = 'http://' + host; - } + return Promise.resolve(host).then((host) => { + if (!/http(s)?:\/\//.test(host)) { + host = 'http://' + host; + } - var parsed = url.parse(host); + var parsed = url.parse(host); - if (!parsed.hostname) { - return new Error('Unable to parse hostname, possibly missing protocol://?'); - } + if (!parsed.hostname) { + return new Error('Unable to parse hostname, possibly missing protocol://?'); + } - var ishttps = options.https || parsed.protocol === 'https:'; + var ishttps = options.https || parsed.protocol === 'https:'; - return { - host: parsed.hostname, - port: parsed.port || (ishttps ? 443 : 80), - module: ishttps ? https : http, - }; + return { + host: parsed.hostname, + port: parsed.port || (ishttps ? 443 : 80), + module: ishttps ? https : http, + }; + }); } function reqHeaders(req, options) {