From 0d190ecf3e1ff6d1b9708ff10180618a513ca4f2 Mon Sep 17 00:00:00 2001 From: Paul Melnikow Date: Tue, 20 Aug 2019 18:09:56 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20Don=E2=80=99t=20clobber=20passed-in=20tl?= =?UTF-8?q?s=20options=20with=20rediss:/=20URLs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/redis/index.ts | 7 +++++++ lib/utils/index.ts | 3 --- test/unit/redis.ts | 6 ++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/redis/index.ts b/lib/redis/index.ts index 9524eee7..7c9e64a8 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..655fa5d3 100644 --- a/test/unit/redis.ts +++ b/test/unit/redis.ts @@ -80,6 +80,12 @@ 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;