mirror of
https://github.com/jazzband/django-defender.git
synced 2026-03-16 22:10:32 +00:00
Add unblock signals
This commit is contained in:
parent
2a5527ac4c
commit
fcfa88d679
3 changed files with 40 additions and 2 deletions
|
|
@ -1,7 +1,10 @@
|
|||
from django.dispatch import Signal
|
||||
|
||||
username_block = Signal(providing_args=['username'])
|
||||
username_unblock = Signal(providing_args=['username'])
|
||||
ip_block = Signal(providing_args=['ip_address'])
|
||||
ip_unblock = Signal(providing_args=['ip_address'])
|
||||
|
||||
|
||||
class BlockSignal:
|
||||
"""
|
||||
|
|
@ -10,8 +13,18 @@ class BlockSignal:
|
|||
"""
|
||||
pass
|
||||
|
||||
|
||||
def send_username_block_signal(username):
|
||||
username_block.send(sender=BlockSignal, username=username)
|
||||
|
||||
|
||||
def send_username_unblock_signal(username):
|
||||
username_unblock.send(sender=BlockSignal, username=username)
|
||||
|
||||
|
||||
def send_ip_block_signal(ip_address):
|
||||
ip_block.send(sender=BlockSignal, ip_address=ip_address)
|
||||
|
||||
|
||||
def send_ip_unblock_signal(ip_address):
|
||||
ip_unblock.send(sender=BlockSignal, ip_address=ip_address)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@ from . import utils
|
|||
from . import config
|
||||
from .signals import (
|
||||
ip_block as ip_block_signal,
|
||||
username_block as username_block_signal
|
||||
ip_unblock as ip_unblock_signal,
|
||||
username_block as username_block_signal,
|
||||
username_unblock as username_unblock_signal,
|
||||
)
|
||||
from .connection import parse_redis_url, get_redis_connection
|
||||
from .decorators import watch_login
|
||||
|
|
@ -936,6 +938,16 @@ class SignalTest(DefenderTestCase):
|
|||
utils.block_ip('8.8.8.8')
|
||||
self.assertEqual(self.blocked_ip, '8.8.8.8')
|
||||
|
||||
def test_should_send_signal_when_unblocking_ip(self):
|
||||
self.blocked_ip = ('8.8.8.8')
|
||||
|
||||
def handler(sender, ip_address, **kwargs):
|
||||
self.blocked_ip = None
|
||||
|
||||
ip_unblock_signal.connect(handler)
|
||||
utils.unblock_ip('8.8.8.8')
|
||||
self.assertIsNone(self.blocked_ip)
|
||||
|
||||
def test_should_send_signal_when_blocking_username(self):
|
||||
self.blocked_username = None
|
||||
|
||||
|
|
@ -946,6 +958,16 @@ class SignalTest(DefenderTestCase):
|
|||
utils.block_username('richard_hendricks')
|
||||
self.assertEqual(self.blocked_username, 'richard_hendricks')
|
||||
|
||||
def test_should_send_signal_when_unblocking_username(self):
|
||||
self.blocked_username = 'richard_hendricks'
|
||||
|
||||
def handler(sender, username, **kwargs):
|
||||
self.blocked_username = None
|
||||
|
||||
username_unblock_signal.connect(handler)
|
||||
utils.unblock_username('richard_hendricks')
|
||||
self.assertIsNone(self.blocked_username)
|
||||
|
||||
|
||||
class DefenderTestCaseTest(DefenderTestCase):
|
||||
""" Make sure that we're cleaning the cache between tests """
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ from django.utils.module_loading import import_string
|
|||
from .connection import get_redis_connection
|
||||
from . import config
|
||||
from .data import store_login_attempt
|
||||
from .signals import send_username_block_signal, send_ip_block_signal
|
||||
from .signals import (send_username_block_signal, send_ip_block_signal,
|
||||
send_username_unblock_signal, send_ip_unblock_signal)
|
||||
|
||||
REDIS_SERVER = get_redis_connection()
|
||||
|
||||
|
|
@ -254,6 +255,7 @@ def unblock_ip(ip_address, pipe=None):
|
|||
pipe.delete(get_ip_blocked_cache_key(ip_address))
|
||||
if do_commit:
|
||||
pipe.execute()
|
||||
send_ip_unblock_signal(ip_address)
|
||||
|
||||
|
||||
def unblock_username(username, pipe=None):
|
||||
|
|
@ -267,6 +269,7 @@ def unblock_username(username, pipe=None):
|
|||
pipe.delete(get_username_blocked_cache_key(username))
|
||||
if do_commit:
|
||||
pipe.execute()
|
||||
send_username_unblock_signal(username)
|
||||
|
||||
|
||||
def reset_failed_attempts(ip_address=None, username=None):
|
||||
|
|
|
|||
Loading…
Reference in a new issue