From a67d3acdd6b6f2e04ba642b43a75d66825ec668b Mon Sep 17 00:00:00 2001 From: Hiroshi Kuwabara Date: Fri, 12 Sep 2014 12:37:32 +0900 Subject: [PATCH] added URL support to createClient --- index.js | 15 +++++++++++++-- test.js | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 7ec74775c02..f2d5ed43cc9 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ /*global Buffer require exports console setTimeout */ var net = require("net"), + URL = require("url"), util = require("./lib/util"), Queue = require("./lib/queue"), to_array = require("./lib/to_array"), @@ -1227,9 +1228,19 @@ exports.createClient = function(arg0, arg1, arg2){ return createClient_tcp(arg0, arg1, arg2); } else if( typeof arg0 === 'string' ){ + var parsed = URL.parse(arg0, true, true), + options = (arg1 || {}); - // createClient( '/tmp/redis.sock', options) - return createClient_unix(arg0,arg1); + if (parsed.hostname) { + if (parsed.auth) { + options.auth_pass = parsed.auth.split(':')[1]; + } + // createClient(3000, host, options) + return createClient_tcp((parsed.port || default_port), parsed.hostname, options); + } else { + // createClient( '/tmp/redis.sock', options) + return createClient_unix(arg0,options); + } } else if( arg0 !== null && typeof arg0 === 'object' ){ diff --git a/test.js b/test.js index b50c05d5bc1..734e5e9c190 100644 --- a/test.js +++ b/test.js @@ -2169,6 +2169,25 @@ tests.auth2 = function () { }); }; +// auth password specified by URL string. +tests.auth3 = function () { + var name = "AUTH3", client4, ready_count = 0; + + client4 = redis.createClient('redis://redistogo:664b1b6aaf134e1ec281945a8de702a9@filefish.redistogo.com:9006/'); + + // test auth, then kill the connection so it'll auto-reconnect and auto-re-auth + client4.on("ready", function () { + ready_count++; + if (ready_count === 1) { + client4.stream.destroy(); + } else { + client4.quit(function (err, res) { + next(name); + }); + } + }); +}; + tests.reconnectRetryMaxDelay = function() { var time = new Date().getTime(), name = 'reconnectRetryMaxDelay',