diff options
author | Javier Cacheiro <javier.cacheiro.lopez@cesga.es> | 2022-05-25 11:37:33 +0200 |
---|---|---|
committer | Javier Cacheiro <javier.cacheiro.lopez@cesga.es> | 2023-01-19 17:19:30 +0100 |
commit | 3d2e93aeb039d44850abe2bb7eecad0938be0c41 (patch) | |
tree | eb93608ad93d9a5b68ec77505b6b3cb9c661915f | |
parent | e23d4e337cd3f4a83d160220af4b09e446eed61a (diff) | |
download | websockify-3d2e93aeb039d44850abe2bb7eecad0938be0c41.tar.gz |
Allow empty options in redis token source string when using default values
-rw-r--r-- | tests/test_token_plugins.py | 64 | ||||
-rw-r--r-- | websockify/token_plugins.py | 25 |
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) |