Skip to content

Commit 3d2e93a

Browse files
author
Javier Cacheiro
committed
Allow empty options in redis token source string when using default values
1 parent e23d4e3 commit 3d2e93a

File tree

2 files changed

+85
-4
lines changed

2 files changed

+85
-4
lines changed

tests/test_token_plugins.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,3 +289,67 @@ def test_src_with_host_port_db_pass(self):
289289
self.assertEqual(plugin._port, 1234)
290290
self.assertEqual(plugin._db, 2)
291291
self.assertEqual(plugin._password, 'verysecret')
292+
293+
def test_src_with_host_empty_port_empty_db_pass(self):
294+
plugin = TokenRedis('127.0.0.1:::verysecret')
295+
296+
self.assertEqual(plugin._server, '127.0.0.1')
297+
self.assertEqual(plugin._port, 6379)
298+
self.assertEqual(plugin._db, 0)
299+
self.assertEqual(plugin._password, 'verysecret')
300+
301+
def test_src_with_host_empty_port_empty_db_empty_pass(self):
302+
plugin = TokenRedis('127.0.0.1:::')
303+
304+
self.assertEqual(plugin._server, '127.0.0.1')
305+
self.assertEqual(plugin._port, 6379)
306+
self.assertEqual(plugin._db, 0)
307+
self.assertEqual(plugin._password, None)
308+
309+
def test_src_with_host_empty_port_empty_db_no_pass(self):
310+
plugin = TokenRedis('127.0.0.1::')
311+
312+
self.assertEqual(plugin._server, '127.0.0.1')
313+
self.assertEqual(plugin._port, 6379)
314+
self.assertEqual(plugin._db, 0)
315+
self.assertEqual(plugin._password, None)
316+
317+
def test_src_with_host_empty_port_no_db_no_pass(self):
318+
plugin = TokenRedis('127.0.0.1:')
319+
320+
self.assertEqual(plugin._server, '127.0.0.1')
321+
self.assertEqual(plugin._port, 6379)
322+
self.assertEqual(plugin._db, 0)
323+
self.assertEqual(plugin._password, None)
324+
325+
def test_src_with_host_empty_port_db_no_pass(self):
326+
plugin = TokenRedis('127.0.0.1::2')
327+
328+
self.assertEqual(plugin._server, '127.0.0.1')
329+
self.assertEqual(plugin._port, 6379)
330+
self.assertEqual(plugin._db, 2)
331+
self.assertEqual(plugin._password, None)
332+
333+
def test_src_with_host_port_empty_db_pass(self):
334+
plugin = TokenRedis('127.0.0.1:1234::verysecret')
335+
336+
self.assertEqual(plugin._server, '127.0.0.1')
337+
self.assertEqual(plugin._port, 1234)
338+
self.assertEqual(plugin._db, 0)
339+
self.assertEqual(plugin._password, 'verysecret')
340+
341+
def test_src_with_host_empty_port_db_pass(self):
342+
plugin = TokenRedis('127.0.0.1::2:verysecret')
343+
344+
self.assertEqual(plugin._server, '127.0.0.1')
345+
self.assertEqual(plugin._port, 6379)
346+
self.assertEqual(plugin._db, 2)
347+
self.assertEqual(plugin._password, 'verysecret')
348+
349+
def test_src_with_host_empty_port_db_empty_pass(self):
350+
plugin = TokenRedis('127.0.0.1::2:')
351+
352+
self.assertEqual(plugin._server, '127.0.0.1')
353+
self.assertEqual(plugin._port, 6379)
354+
self.assertEqual(plugin._db, 2)
355+
self.assertEqual(plugin._password, None)

websockify/token_plugins.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,16 +163,21 @@ class TokenRedis(BasePlugin):
163163
164164
host[:port[:db[:password]]]
165165
166-
where port and password are optional.
166+
where port, db and password are optional. If port or db are left empty
167+
they will take its default value, ie. 6379 and 0 respectively.
167168
168169
If your redis server is using the default port (6379) then you can use:
169170
170171
my-redis-host
171172
172-
In case you need to authenticate with the redis server you will have to
173-
specify also the port and db:
173+
In case you need to authenticate with the redis server and you are using
174+
the default database and port you can use:
174175
175-
my-redis-host:6379:0:verysecretpass
176+
my-redis-host:::verysecretpass
177+
178+
In the more general case you will use:
179+
180+
my-redis-host:6380:1:verysecretpass
176181
177182
The TokenRedis plugin expects the format of the target in one of these two
178183
formats:
@@ -218,10 +223,22 @@ def __init__(self, src):
218223
self._server = fields[0]
219224
elif len(fields) == 2:
220225
self._server, self._port = fields
226+
if not self._port:
227+
self._port = 6379
221228
elif len(fields) == 3:
222229
self._server, self._port, self._db = fields
230+
if not self._port:
231+
self._port = 6379
232+
if not self._db:
233+
self._db = 0
223234
elif len(fields) == 4:
224235
self._server, self._port, self._db, self._password = fields
236+
if not self._port:
237+
self._port = 6379
238+
if not self._db:
239+
self._db = 0
240+
if not self._password:
241+
self._password = None
225242
else:
226243
raise ValueError
227244
self._port = int(self._port)

0 commit comments

Comments
 (0)