From ceefcfaec93508aaeb1d2b61cfa7f5421f41af3d Mon Sep 17 00:00:00 2001 From: Paul Melnikow Date: Mon, 26 Aug 2019 22:41:04 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20don=E2=80=99t=20clobber=20passed-in=20tl?= =?UTF-8?q?s=20options=20with=20rediss:/=20URLs=20(#949)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #942, #949, #940, #950, #948 --- lib/redis/index.ts | 7 +++++++ lib/utils/index.ts | 3 --- test/unit/redis.ts | 8 ++++++++ test/unit/utils.ts | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/redis/index.ts b/lib/redis/index.ts index 9524eee7..e1a48981 100644 --- a/lib/redis/index.ts +++ b/lib/redis/index.ts @@ -192,6 +192,7 @@ Redis.prototype.resetOfflineQueue = function() { Redis.prototype.parseOptions = function() { this.options = {}; + let isTls = false; for (var i = 0; i < arguments.length; ++i) { var arg = arguments[i]; if (arg === null || typeof arg === "undefined") { @@ -201,12 +202,18 @@ Redis.prototype.parseOptions = function() { defaults(this.options, arg); } else if (typeof arg === "string") { defaults(this.options, parseURL(arg)); + if (arg.startsWith("rediss://")) { + isTls = true; + } } else if (typeof arg === "number") { this.options.port = arg; } else { throw new Error("Invalid argument " + arg); } } + if (isTls) { + defaults(this.options, { tls: true }); + } defaults(this.options, Redis.defaultOptions); if (typeof this.options.port === "string") { diff --git a/lib/utils/index.ts b/lib/utils/index.ts index a97bd288..fb37c791 100644 --- a/lib/utils/index.ts +++ b/lib/utils/index.ts @@ -274,9 +274,6 @@ export function parseURL(url) { if (parsed.port) { result.port = parsed.port; } - if (parsed.protocol === "rediss:") { - result.tls = true; - } defaults(result, parsed.query); return result; diff --git a/test/unit/redis.ts b/test/unit/redis.ts index 48fe36de..7bf96d51 100644 --- a/test/unit/redis.ts +++ b/test/unit/redis.ts @@ -80,6 +80,14 @@ describe("Redis", function() { host: "192.168.1.1" }); expect(option).to.have.property("port", 6380); + + option = getOption("rediss://host"); + expect(option).to.have.property("tls", true); + + option = getOption("rediss://example.test", { + tls: { hostname: "example.test" } + }); + expect(option.tls).to.deep.equal({ hostname: "example.test" }); } catch (err) { stub.restore(); throw err; diff --git a/test/unit/utils.ts b/test/unit/utils.ts index 7993b12d..52d2aae8 100644 --- a/test/unit/utils.ts +++ b/test/unit/utils.ts @@ -195,7 +195,6 @@ describe("utils", function() { expect( utils.parseURL("rediss://user:pass@127.0.0.1:6380/4?key=value") ).to.eql({ - tls: true, host: "127.0.0.1", port: "6380", db: "4",