From 2b776733365bd84fea9c601ea2d3b69a1f15f9e1 Mon Sep 17 00:00:00 2001 From: Ken Cochrane Date: Sun, 25 Nov 2012 17:42:55 -0500 Subject: [PATCH] added a signal for when a user gets locked out --- axes/decorators.py | 7 ++++++- axes/signals.py | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 axes/signals.py diff --git a/axes/decorators.py b/axes/decorators.py index 9ab2768..c97199d 100644 --- a/axes/decorators.py +++ b/axes/decorators.py @@ -24,6 +24,7 @@ except ImportError: from datetime import datetime from axes.models import AccessAttempt, AccessLog +from axes.signals import user_locked_out import axes # see if the user has overridden the failure limit @@ -239,6 +240,8 @@ def log_access_request(request, login_unsuccessful): def check_request(request, login_unsuccessful): log_access_request(request, login_unsuccessful) + ip_address = request.META.get('REMOTE_ADDR', '') + username = request.POST.get('username', None) failures = 0 attempts = get_user_attempts(request) @@ -293,7 +296,9 @@ def check_request(request, login_unsuccessful): # password logout(request) log.warn('AXES: locked out %s after repeated login attempts.' % - (attempt.ip_address,)) + (ip_address,)) + # send signal when someone is locked out. + user_locked_out.send(request=request, username=username) # if a trusted login has violated lockout, revoke trust for attempt in [a for a in attempts if a.trusted]: diff --git a/axes/signals.py b/axes/signals.py new file mode 100644 index 0000000..81fb9db --- /dev/null +++ b/axes/signals.py @@ -0,0 +1,3 @@ +from django.dispatch import Signal + +user_locked_out = Signal(providing_args=['request', 'username']) \ No newline at end of file