Allow empty options in redis token source string when using default values

This commit is contained in:
Javier Cacheiro 2022-05-25 11:37:33 +02:00
parent e23d4e337c
commit 3d2e93aeb0
2 changed files with 85 additions and 4 deletions

View File

@ -289,3 +289,67 @@ class TokenRedisTestCase(unittest.TestCase):
self.assertEqual(plugin._port, 1234) self.assertEqual(plugin._port, 1234)
self.assertEqual(plugin._db, 2) self.assertEqual(plugin._db, 2)
self.assertEqual(plugin._password, 'verysecret') 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)

View File

@ -163,16 +163,21 @@ class TokenRedis(BasePlugin):
host[:port[:db[:password]]] 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: If your redis server is using the default port (6379) then you can use:
my-redis-host my-redis-host
In case you need to authenticate with the redis server you will have to In case you need to authenticate with the redis server and you are using
specify also the port and db: 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 The TokenRedis plugin expects the format of the target in one of these two
formats: formats:
@ -218,10 +223,22 @@ class TokenRedis(BasePlugin):
self._server = fields[0] self._server = fields[0]
elif len(fields) == 2: elif len(fields) == 2:
self._server, self._port = fields self._server, self._port = fields
if not self._port:
self._port = 6379
elif len(fields) == 3: elif len(fields) == 3:
self._server, self._port, self._db = fields 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: elif len(fields) == 4:
self._server, self._port, self._db, self._password = fields 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: else:
raise ValueError raise ValueError
self._port = int(self._port) self._port = int(self._port)