diff --git a/defender/decorators.py b/defender/decorators.py index f2ddc0b..b4cd40a 100644 --- a/defender/decorators.py +++ b/defender/decorators.py @@ -1,7 +1,7 @@ import logging import socket -from redis import StrictRedis +import redis from django.conf import settings from django.http import HttpResponse from django.http import HttpResponseRedirect @@ -50,7 +50,7 @@ VERBOSE = getattr(settings, 'DEFENDER_VERBOSE', True) ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. " "Note that both fields are case-sensitive.") -redis_server = StrictRedis( +redis_server = redis.StrictRedis( host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB, password=REDIS_PASSWORD) log = logging.getLogger(__name__) @@ -175,13 +175,13 @@ def get_user_attempts(request): def block_ip(ip): """ given the ip, block it""" key = get_ip_blocked_cache_key(ip) - redis_server.set(key, COOLOFF_TIME) + redis_server.set(key, 'blocked', COOLOFF_TIME) def block_username(username): """ given the username block it. """ key = get_username_blocked_cache_key(username) - redis_server.set(key, COOLOFF_TIME) + redis_server.set(key, 'blocked', COOLOFF_TIME) def record_failed_attempt(ip, username): @@ -239,6 +239,7 @@ def is_already_locked(request): # ip blocked? ip_blocked = redis_server.get(get_ip_blocked_cache_key(ip_address)) + if not ip_blocked: ip_blocked = False @@ -261,7 +262,7 @@ def check_request(request, login_unsuccessful): result = record_failed_attempt(ip_address, username) else: # user logged in -- forget the failed attempts - reset_failed_attempts(ip_address, username) + reset_failed_attempts(ip=ip_address, username=username) return result diff --git a/defender/models.py b/defender/models.py index 16276a5..2836901 100644 --- a/defender/models.py +++ b/defender/models.py @@ -29,5 +29,4 @@ class AccessAttempt(models.Model): ) class Meta: - abstract = True ordering = ['-attempt_time'] diff --git a/defender/test_settings.py b/defender/test_settings.py index 1bf7006..865e9e0 100644 --- a/defender/test_settings.py +++ b/defender/test_settings.py @@ -40,6 +40,5 @@ SECRET_KEY = 'too-secret-for-test' LOGIN_REDIRECT_URL = '/admin' -AXES_LOGIN_FAILURE_LIMIT = 10 -from datetime import timedelta -AXES_COOLOFF_TIME = timedelta(seconds=2) +DEFENDER_LOGIN_FAILURE_LIMIT = 10 +DEFENDER_COOLOFF_TIME = 2 diff --git a/defender/tests.py b/defender/tests.py index 5d73b5c..e9fedd5 100644 --- a/defender/tests.py +++ b/defender/tests.py @@ -13,11 +13,12 @@ from defender.decorators import ( COOLOFF_TIME, FAILURE_LIMIT, reset_failed_attempts) +redis_client = mockredis.mock_strict_redis_client() + # Django >= 1.7 compatibility try: ADMIN_LOGIN_URL = reverse('admin:login') - LOGIN_FORM_KEY = '