Skip to content

Commit 40052ea

Browse files
committedOct 30, 2021
Make compatible with Node 17.
1 parent 86f7572 commit 40052ea

12 files changed

+116
-152
lines changed
 

‎.github/workflows/ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ jobs:
3434
- '15.x'
3535
- '16.0'
3636
- '16.x'
37+
- '17.0'
38+
- '17.x'
3739
steps:
3840
- name: Use Node.js ${{ matrix.node-version }}
3941
uses: actions/setup-node@v2
4042
with:
4143
node-version: ${{ matrix.node-version }}
4244
- uses: actions/checkout@v2
43-
- if: ${{ matrix.node-version == '4.x' || matrix.node-version == '6.0' }}
44-
run: npm install mocha@5.0.0 eslint@4.19.1 esquery@1.0.0 nyc@11.8.0
4545
- run: npm install
4646
- if: ${{ matrix.node-version == '4.x' }}
4747
run: npm install mocha@5.0.0 eslint@4.19.1 esquery@1.0.0 nyc@11.8.0

‎index.js

+20-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ events.forEach(function (event) {
1818
// Error types with codes
1919
var RedirectionError = createErrorType(
2020
"ERR_FR_REDIRECTION_FAILURE",
21-
""
21+
"Redirected request failed"
2222
);
2323
var TooManyRedirectsError = createErrorType(
2424
"ERR_FR_TOO_MANY_REDIRECTS",
@@ -376,8 +376,17 @@ RedirectableRequest.prototype._processResponse = function (response) {
376376
var currentUrl = /^\w+:/.test(location) ? this._currentUrl :
377377
url.format(Object.assign(currentUrlParts, { host: currentHost }));
378378

379+
// Determine the URL of the redirection
380+
var redirectUrl;
381+
try {
382+
redirectUrl = url.resolve(currentUrl, location);
383+
}
384+
catch (cause) {
385+
this.emit("error", new RedirectionError(cause));
386+
return;
387+
}
388+
379389
// Create the redirected request
380-
var redirectUrl = url.resolve(currentUrl, location);
381390
debug("redirecting to", redirectUrl);
382391
this._isRedirect = true;
383392
var redirectUrlParts = url.parse(redirectUrl);
@@ -406,9 +415,7 @@ RedirectableRequest.prototype._processResponse = function (response) {
406415
this._performRequest();
407416
}
408417
catch (cause) {
409-
var error = new RedirectionError("Redirected request failed: " + cause.message);
410-
error.cause = cause;
411-
this.emit("error", error);
418+
this.emit("error", new RedirectionError(cause));
412419
}
413420
}
414421
else {
@@ -526,9 +533,15 @@ function removeMatchingHeaders(regex, headers) {
526533
}
527534

528535
function createErrorType(code, defaultMessage) {
529-
function CustomError(message) {
536+
function CustomError(cause) {
530537
Error.captureStackTrace(this, this.constructor);
531-
this.message = message || defaultMessage;
538+
if (!cause) {
539+
this.message = defaultMessage;
540+
}
541+
else {
542+
this.message = defaultMessage + ": " + cause.message;
543+
this.cause = cause;
544+
}
532545
}
533546
CustomError.prototype = new Error();
534547
CustomError.prototype.constructor = CustomError;

‎test/assets/TestCA.crt

-19
This file was deleted.

‎test/assets/TestCA.pem

-27
This file was deleted.

‎test/assets/TestClient.crt

-19
This file was deleted.

‎test/assets/TestClient.pem

-27
This file was deleted.

‎test/assets/TestServer.crt

-19
This file was deleted.

‎test/assets/TestServer.pem

-27
This file was deleted.

‎test/assets/ca.crt

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICmDCCAYACCQDo0UEmHVSlqjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJC
3+
RTAgFw0yMTEwMzAxODEwMDZaGA8yMTIxMTAwNjE4MTAwNlowDTELMAkGA1UEBhMC
4+
QkUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYjGqoyk9fKI/Hrl8R
5+
4E/7A3YzvsSnDhxyOT+k7YRTpuHwL7HF/9C5EFbGPgh0c8VsQxEzbPlAwPgajeHR
6+
K6zFpqbkA7wozktV/vIm8DZdc5h2flUpjScazAP/MXMp7i0CpR4qmsRl9HuhFmmd
7+
D9VxwWjgT4rafrOXhX8HjQ015FvjpFlFAzEiRAuxJzS0zd9OmDOyR4/VxBCHyf9D
8+
Wz4yfZdjaXXfbc5ljJiBGS4vR0inx2hPwcxD8YWHI+o9lSCjsr1OFy0bpjJ/aXih
9+
Na4pe19Np0IoI+s+mlx568+WqYXbFNovH71gUhhaUtZPWByzPaeHdK5SeylZArHl
10+
lkKPAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAIIUHDzunkvnZ5DBMOKbEVn0fr2R
11+
yvKVNtRp59OWF1nJH9pr318TSk+yIClBRIismMHM6GnFYpDjqiGfJYtSN/amupGK
12+
h9b6aMDKKfSr7iAi9DzgPEvYaWcXGMRWmOWqxGS9zsvmM1vGkL7KsCWGIbtstxg+
13+
P8m4HSO6zXuBpe68yRSnNgrusMr1jviDE+aiyZANiZm7TPfIr7NHHmTk82aZtYCH
14+
yuDujnE5cNhJHH9iBGOBm51TZDMg9lFm9ItEAfHTC5++KfXMYokg7fqCJFU6d2y8
15+
O2P7e16PvX6lWcwTENq9ENiyEuTch3r+ZemJpoudKeaBcdrvLHSm+Nkvgwg=
16+
-----END CERTIFICATE-----

‎test/assets/localhost.crt

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDDDCCAfSgAwIBAgIJALzCVuuVEADhMA0GCSqGSIb3DQEBCwUAMA0xCzAJBgNV
3+
BAYTAkJFMCAXDTIxMTAzMDE4MTExNVoYDzIxMjExMDA2MTgxMTE1WjAhMQswCQYD
4+
VQQGEwJCRTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC
5+
AQ8AMIIBCgKCAQEAroS25VMhjk1IvVv3gvB4ZMPhwRpeDP/gfdd2mWaqPS9m/S36
6+
9DXGXKBiuNN0GNR8Ng1voaowFPRpvJAR6JBAhpdJsV+rLONg2jqUR49ihDZwpl77
7+
bvYG91DXcWGRAPLjEIHZQFtvZjQxTRGo3c614GyLzO4bz1Cac0TLtSwmlgOzWcg7
8+
g45+uvZOT7bJ7/7ryjUGassKiwE39RIRlFrE6DBj8TPTBmBSA6fzA2mlDX1YQzEz
9+
cZw7aM7IyTKEKM5C5Cc2H3ykd+fejPi/zM4ntrAOyeDXOwfskU5eXg8p/tL8USBn
10+
pDA94i1CNXBI+FDLwD2NZMVTb3J9vzghaN/5XwIDAQABo1kwVzAnBgNVHSMEIDAe
11+
oRGkDzANMQswCQYDVQQGEwJCRYIJAOjRQSYdVKWqMAkGA1UdEwQCMAAwCwYDVR0P
12+
BAQDAgTwMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEA
13+
PvKbSVKzOBxl5MRczuo/QULzFLu6Rwe7dxVbTH4mOvcf2Njd5rL6oKZNAbPp5TBa
14+
HSXXIVJsB0cKVBMtovu+Q343AeMxPHclCOTXnKfTG3OplLuhtkzsjDMrjzynLnUK
15+
8iLdBT44Sa4BEPJwguZMb3fvhUKtbCj3WhoIodOgyD3W+Ufyvn5C9be6G9feBWrJ
16+
52O1HPp72oi54gng0VhqzUXhN6FfFSwFygxf22C1m1grl4CBdfYb6DV17JqINtk8
17+
HK0QOiWXlmUaGHOEYz8FZPOliUPpJWeD0N/tCAbkAYbMPvog93E1yNJjW4SYAh7z
18+
kVhFAcus9F4V9K47vx4a5w==
19+
-----END CERTIFICATE-----

‎test/assets/localhost.key

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEogIBAAKCAQEAroS25VMhjk1IvVv3gvB4ZMPhwRpeDP/gfdd2mWaqPS9m/S36
3+
9DXGXKBiuNN0GNR8Ng1voaowFPRpvJAR6JBAhpdJsV+rLONg2jqUR49ihDZwpl77
4+
bvYG91DXcWGRAPLjEIHZQFtvZjQxTRGo3c614GyLzO4bz1Cac0TLtSwmlgOzWcg7
5+
g45+uvZOT7bJ7/7ryjUGassKiwE39RIRlFrE6DBj8TPTBmBSA6fzA2mlDX1YQzEz
6+
cZw7aM7IyTKEKM5C5Cc2H3ykd+fejPi/zM4ntrAOyeDXOwfskU5eXg8p/tL8USBn
7+
pDA94i1CNXBI+FDLwD2NZMVTb3J9vzghaN/5XwIDAQABAoIBAET0rWupUD3w7Yfc
8+
mczEBV4TQ9VP/M94HxS6GON9/FAWtcPd8iWiRdF9keRjsKDK/JVC89PV8g+lj03x
9+
QxI4RTao+nY6TeF7ql4v/TzVO+Dvvc0PBJwQXCpGaAoluey9C9kO5W+XcUnZ340L
10+
KEUUEyss2IRNpPFicNSQ30ijvE9TWeJ6gdWSqcpGSBhjoFa1Kd/9Aqc06VNSFwLx
11+
i4PSuU4YIgl1qlpUC7zN7bkQ3oqhoRpzzYL1p4MAmZ5c0bNAk0/LkIVaJedEbr+j
12+
dx8ABqY3LyAznd7IH72UMrN999r1jC0Th3+im6G92U6Ukbotj3AY9iIyqw/xkOUa
13+
SwTqLAECgYEA2fCnfVJFSAc5CwxDF9FCVLLgqHb6EiJZBDLOSSXVe6crajujZXlx
14+
frawn3SNFR6AqNFHualCkOkrl7anucdG0733DjACqcl0LhNd4C1amxaGWUoYmGDw
15+
ousY/ekwtEbJWmY/nAzAn3qOIuXSV+QVndGPjOshF5DeP+Y/DpfcX18CgYEAzP7U
16+
M6sCI5pSTTZOY273laVxbPyrK6z8SjW1emrC9tDWeFMDRr9qy9GAj0ov4EhbAtLG
17+
2Frt89jHdSNxaZDe6Rcc8biVFZZWITwkH9QNwX52grNezMXD50GMjzDqVF+2H5pZ
18+
Wa65/71ZUPRjsyUu1ePrcQlWcA/YVqet2WBUpgECgYB9LTZmSry0VEG1UMOwiGa6
19+
00sqN7wGcmgCe1P0u6BUt32+NKby/7/qcfAchgsKmEx5qkqyHr+3D9YT+7t2fzj1
20+
IWUnZvgAoU7zr/f5bNNfxJ5B5scdroBIcxQVsrxgr0+zdosOjFyOvQuqi6o3BTBN
21+
RzJWVC7bpD+jIBITxbGzrQKBgD4sh+XH1xU/R/j9IJdN36+2hwlcNPpBNB+53Hnt
22+
iYZcXsANxW+evOBmgUx0XsLyjw/zJ7YVFhigRhaEEnDHLKSbiv7RUf5DI4pe+EHj
23+
Ce0G0yDfEEChNsKcAeqoFlpS0SUSpkjqEqW7IyzHgrmh7GuY/h7Bi0Lfu2jE4JiO
24+
e/4BAoGARW4XbEHT2eNd27inCiN4NBeFQbp8UqdPGeL9vTOl5RHCouATx5QjIhtK
25+
7Bb9byt2BOSvxNOJbh7kk1NThd/y1Y7GARR/61s7czx8Ass3bxJ6+rl20PhozMZb
26+
BWA6BwWl0DfanuHbgz+jIfU60K5tMHX0dA1tyRi2iee91e2ugyk=
27+
-----END RSA PRIVATE KEY-----

‎test/test.js

+32-5
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ describe("follow-redirects", function () {
2929
return {
3030
app: app,
3131
protocol: "https",
32-
cert: fs.readFileSync(path.resolve(__dirname, "assets/TestServer.crt")),
33-
key: fs.readFileSync(path.resolve(__dirname, "assets/TestServer.pem")),
32+
cert: fs.readFileSync(path.resolve(__dirname, "assets/localhost.crt")),
33+
key: fs.readFileSync(path.resolve(__dirname, "assets/localhost.key")),
3434
};
3535
}
36-
var ca = fs.readFileSync(path.resolve(__dirname, "assets/TestCA.crt"));
36+
var ca = fs.readFileSync(path.resolve(__dirname, "assets/ca.crt"));
3737

3838
var app;
3939
var app2;
@@ -281,9 +281,36 @@ describe("follow-redirects", function () {
281281
.then(function (error) {
282282
assert(error instanceof Error);
283283
assert.equal(error.code, "ERR_FR_REDIRECTION_FAILURE");
284-
assert.equal(error.message, "Redirected request failed: Request path contains unescaped characters");
285284
assert(error.cause instanceof Error);
286-
assert.equal(error.cause.code, "ERR_UNESCAPED_CHARACTERS");
285+
switch (error.cause.code) {
286+
// Node 17+
287+
case "ERR_INVALID_URL":
288+
assert.equal(error.message, "Redirected request failed: Invalid URL");
289+
break;
290+
// Older Node versions
291+
case "ERR_UNESCAPED_CHARACTERS":
292+
assert.equal(error.message, "Redirected request failed: Request path contains unescaped characters");
293+
break;
294+
default:
295+
throw new Error("Unexpected error code " + error.code);
296+
}
297+
});
298+
});
299+
300+
it("emits an error whem url.resolve fails", function () {
301+
app.get("/a", redirectsTo("/b"));
302+
var urlResolve = url.resolve;
303+
url.resolve = function () {
304+
throw new Error();
305+
};
306+
307+
return server.start(app)
308+
.then(asPromise(function (resolve) {
309+
http.get("http://localhost:3600/a").on("error", resolve);
310+
}))
311+
.then(function (error) {
312+
url.resolve = urlResolve;
313+
assert.equal(error.code, "ERR_FR_REDIRECTION_FAILURE");
287314
});
288315
});
289316

0 commit comments

Comments
 (0)
Please sign in to comment.