import random import string import time from unittest.mock import patch from django.contrib.auth.models import AnonymousUser, User from django.contrib.sessions.backends.db import SessionStore from django.http import HttpRequest, HttpResponse from django.test.client import RequestFactory from django.test.testcases import TestCase from redis.client import Redis from django.urls import reverse import redis from defender.data import get_approx_account_lockouts_from_login_attempts, get_approx_lockouts_cache_key from . import utils from . import config from .signals import ( ip_block as ip_block_signal, ip_unblock as ip_unblock_signal, username_block as username_block_signal, username_unblock as username_unblock_signal, ) from .connection import get_redis_connection from .decorators import watch_login from .models import AccessAttempt from .test import DefenderTestCase, DefenderTransactionTestCase LOGIN_FORM_KEY = '