From 67ebb8edffbf2441f1bd3dda20017e5c7d3acff3 Mon Sep 17 00:00:00 2001 From: nephridium Date: Fri, 26 Jun 2015 22:17:50 +0800 Subject: [PATCH 1/3] Make key_list read from redis Python 3 compatible Converts from bytes to string using .decode('utf-8') --- defender/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defender/utils.py b/defender/utils.py index aebf934..1e44a78 100644 --- a/defender/utils.py +++ b/defender/utils.py @@ -88,14 +88,14 @@ def strip_keys(key_list): def get_blocked_ips(): """ get a list of blocked ips from redis """ key = get_ip_blocked_cache_key("*") - key_list = REDIS_SERVER.keys(key) + key_list = [redis_key.decode('utf-8') for redis_key in REDIS_SERVER.keys(key)] return strip_keys(key_list) def get_blocked_usernames(): """ get a list of blocked usernames from redis """ key = get_username_blocked_cache_key("*") - key_list = REDIS_SERVER.keys(key) + key_list = [redis_key.decode('utf-8') for redis_key in REDIS_SERVER.keys(key)] return strip_keys(key_list) From a3207d582a74b1b4068e397be16bdbc6137ef524 Mon Sep 17 00:00:00 2001 From: nephridium Date: Mon, 29 Jun 2015 18:33:33 +0800 Subject: [PATCH 2/3] Add tests for utils get_blocked_ips() and get_blocked_usernames() --- defender/tests.py | 22 ++++++++++++++++++++++ defender/utils.py | 6 ++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/defender/tests.py b/defender/tests.py index 72e2287..b636334 100644 --- a/defender/tests.py +++ b/defender/tests.py @@ -75,6 +75,28 @@ class AccessAttemptTest(DefenderTestCase): password=VALID_PASSWORD, ) + def test_data_integrity_of_get_blocked_ips(self): + """ Test whether data retrieved from redis via + get_blocked_ips() is the same as the data saved + """ + data_in = ['127.0.0.1', '4.2.2.1'] + for ip in data_in: + utils.block_ip(ip) + data_out = utils.get_blocked_ips() + # values stored are unique, so we can use set() + self.assertEqual(sorted(data_in), sorted(data_out)) + + def test_data_integrity_of_get_blocked_usernames(self): + """ Test whether data retrieved from redis via + get_blocked_usernames() is the same as the data saved + """ + data_in = ['foo', 'bar'] + for username in data_in: + utils.block_username(username) + data_out = utils.get_blocked_usernames() + # values stored are unique, so we can use set() + self.assertEqual(sorted(data_in), sorted(data_out)) + def test_login_get(self): """ visit the login page """ response = self.client.get(ADMIN_LOGIN_URL) diff --git a/defender/utils.py b/defender/utils.py index 1e44a78..dbd40b8 100644 --- a/defender/utils.py +++ b/defender/utils.py @@ -88,14 +88,16 @@ def strip_keys(key_list): def get_blocked_ips(): """ get a list of blocked ips from redis """ key = get_ip_blocked_cache_key("*") - key_list = [redis_key.decode('utf-8') for redis_key in REDIS_SERVER.keys(key)] + key_list = [redis_key.decode('utf-8') + for redis_key in REDIS_SERVER.keys(key)] return strip_keys(key_list) def get_blocked_usernames(): """ get a list of blocked usernames from redis """ key = get_username_blocked_cache_key("*") - key_list = [redis_key.decode('utf-8') for redis_key in REDIS_SERVER.keys(key)] + key_list = [redis_key.decode('utf-8') + for redis_key in REDIS_SERVER.keys(key)] return strip_keys(key_list) From 64736040af33f73bcf08e02de85ae1673e1f01b9 Mon Sep 17 00:00:00 2001 From: nephridium Date: Mon, 29 Jun 2015 18:42:09 +0800 Subject: [PATCH 3/3] Remove obsolete comments --- defender/tests.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/defender/tests.py b/defender/tests.py index b636334..34cd4cb 100644 --- a/defender/tests.py +++ b/defender/tests.py @@ -83,7 +83,6 @@ class AccessAttemptTest(DefenderTestCase): for ip in data_in: utils.block_ip(ip) data_out = utils.get_blocked_ips() - # values stored are unique, so we can use set() self.assertEqual(sorted(data_in), sorted(data_out)) def test_data_integrity_of_get_blocked_usernames(self): @@ -94,7 +93,6 @@ class AccessAttemptTest(DefenderTestCase): for username in data_in: utils.block_username(username) data_out = utils.get_blocked_usernames() - # values stored are unique, so we can use set() self.assertEqual(sorted(data_in), sorted(data_out)) def test_login_get(self):