summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier Cacheiro <javier.cacheiro.lopez@cesga.es>2022-05-25 11:37:33 +0200
committerJavier Cacheiro <javier.cacheiro.lopez@cesga.es>2023-01-19 17:19:30 +0100
commit3d2e93aeb039d44850abe2bb7eecad0938be0c41 (patch)
treeeb93608ad93d9a5b68ec77505b6b3cb9c661915f
parente23d4e337cd3f4a83d160220af4b09e446eed61a (diff)
downloadwebsockify-3d2e93aeb039d44850abe2bb7eecad0938be0c41.tar.gz
Allow empty options in redis token source string when using default values
-rw-r--r--tests/test_token_plugins.py64
-rw-r--r--websockify/token_plugins.py25
2 files changed, 85 insertions, 4 deletions
diff --git a/tests/test_token_plugins.py b/tests/test_token_plugins.py
index b3a1847..d13d944 100644
--- a/tests/test_token_plugins.py
+++ b/tests/test_token_plugins.py
@@ -289,3 +289,67 @@ class TokenRedisTestCase(unittest.TestCase):
self.assertEqual(plugin._port, 1234)
self.assertEqual(plugin._db, 2)
self.assertEqual(plugin._password, 'verysecret')
+
+ def test_src_with_host_empty_port_empty_db_pass(self):
+ plugin = TokenRedis('127.0.0.1:::verysecret')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 6379)
+ self.assertEqual(plugin._db, 0)
+ self.assertEqual(plugin._password, 'verysecret')
+
+ def test_src_with_host_empty_port_empty_db_empty_pass(self):
+ plugin = TokenRedis('127.0.0.1:::')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 6379)
+ self.assertEqual(plugin._db, 0)
+ self.assertEqual(plugin._password, None)
+
+ def test_src_with_host_empty_port_empty_db_no_pass(self):
+ plugin = TokenRedis('127.0.0.1::')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 6379)
+ self.assertEqual(plugin._db, 0)
+ self.assertEqual(plugin._password, None)
+
+ def test_src_with_host_empty_port_no_db_no_pass(self):
+ plugin = TokenRedis('127.0.0.1:')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 6379)
+ self.assertEqual(plugin._db, 0)
+ self.assertEqual(plugin._password, None)
+
+ def test_src_with_host_empty_port_db_no_pass(self):
+ plugin = TokenRedis('127.0.0.1::2')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 6379)
+ self.assertEqual(plugin._db, 2)
+ self.assertEqual(plugin._password, None)
+
+ def test_src_with_host_port_empty_db_pass(self):
+ plugin = TokenRedis('127.0.0.1:1234::verysecret')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 1234)
+ self.assertEqual(plugin._db, 0)
+ self.assertEqual(plugin._password, 'verysecret')
+
+ def test_src_with_host_empty_port_db_pass(self):
+ plugin = TokenRedis('127.0.0.1::2:verysecret')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 6379)
+ self.assertEqual(plugin._db, 2)
+ self.assertEqual(plugin._password, 'verysecret')
+
+ def test_src_with_host_empty_port_db_empty_pass(self):
+ plugin = TokenRedis('127.0.0.1::2:')
+
+ self.assertEqual(plugin._server, '127.0.0.1')
+ self.assertEqual(plugin._port, 6379)
+ self.assertEqual(plugin._db, 2)
+ self.assertEqual(plugin._password, None)
diff --git a/websockify/token_plugins.py b/websockify/token_plugins.py
index 4e92c56..d42414e 100644
--- a/websockify/token_plugins.py
+++ b/websockify/token_plugins.py
@@ -163,16 +163,21 @@ class TokenRedis(BasePlugin):
host[:port[:db[:password]]]
- where port and password are optional.
+ where port, db and password are optional. If port or db are left empty
+ they will take its default value, ie. 6379 and 0 respectively.
If your redis server is using the default port (6379) then you can use:
my-redis-host
- In case you need to authenticate with the redis server you will have to
- specify also the port and db:
+ In case you need to authenticate with the redis server and you are using
+ the default database and port you can use:
- my-redis-host:6379:0:verysecretpass
+ my-redis-host:::verysecretpass
+
+ In the more general case you will use:
+
+ my-redis-host:6380:1:verysecretpass
The TokenRedis plugin expects the format of the target in one of these two
formats:
@@ -218,10 +223,22 @@ class TokenRedis(BasePlugin):
self._server = fields[0]
elif len(fields) == 2:
self._server, self._port = fields
+ if not self._port:
+ self._port = 6379
elif len(fields) == 3:
self._server, self._port, self._db = fields
+ if not self._port:
+ self._port = 6379
+ if not self._db:
+ self._db = 0
elif len(fields) == 4:
self._server, self._port, self._db, self._password = fields
+ if not self._port:
+ self._port = 6379
+ if not self._db:
+ self._db = 0
+ if not self._password:
+ self._password = None
else:
raise ValueError
self._port = int(self._port)