123456789101112131415161718192021222324252627282930313233343536373839 |
- from datetime import timedelta
- from django.db import models
- from django.utils import timezone
- from misago.conf import settings
- class SignInAttemptsManager(models.Manager):
- """
- IP's that have exhausted their quota of sign-in attempts are automatically banned for set amount of time.
- That IP ban cuts bad IP address from signing into board by either making another sign-in attempts or
- registering "fresh" account.
- """
- def register_attempt(self, ip):
- attempt = SignInAttempt(ip=ip, date=timezone.now())
- attempt.save(force_insert=True)
- def is_jammed(self, ip):
- # Limit is off, dont jam IPs?
- if settings.attempts_limit == 0:
- return False
- # Check jam
- if settings.jams_lifetime > 0:
- attempts = SignInAttempt.objects.filter(
- date__gt=timezone.now() - timedelta(minutes=settings.jams_lifetime),
- ip=ip
- )
- else:
- attempts = SignInAttempt.objects.filter(ip=ip)
- return attempts.count() > settings.attempts_limit
- class SignInAttempt(models.Model):
- ip = models.GenericIPAddressField()
- date = models.DateTimeField()
- objects = SignInAttemptsManager()
- class Meta:
- app_label = 'misago'
|