throttle submissions
parent
7516e6736c
commit
50d34f28e8
|
@ -1,10 +1,25 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.forms import Form, CharField, EmailField, Textarea, ChoiceField
|
||||
|
||||
from common.forms import CaptchaField
|
||||
|
||||
from .models import ISSUE_TYPE_CHOICES
|
||||
|
||||
|
||||
# this should go in something like redis. I refuse, however, to involve redis
|
||||
# in all of this until i have 2-3 more usecases.
|
||||
submission_throttle = {}
|
||||
|
||||
def throttle_submission(email):
|
||||
last_submission = submission_throttle.get(email)
|
||||
now = datetime.now()
|
||||
if last_submission is None\
|
||||
or now - last_submission > timedelta(minutes=30):
|
||||
submission_throttle[email] = datetime.now()
|
||||
else:
|
||||
raise ValidationError('you have submitted pretty recently. try again in a bit.')
|
||||
|
||||
def validate_issue_text(text):
|
||||
if len(text) == 0:
|
||||
raise ValidationError('please describe yr issue')
|
||||
|
@ -35,6 +50,9 @@ class TicketForm(Form):
|
|||
|
||||
def clean(self):
|
||||
result = super().clean()
|
||||
|
||||
throttle_submission(result['email'])
|
||||
|
||||
if self.errors:
|
||||
raise ValidationError('oops, looks like there were some problems below.')
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ USERNAME_MIN_LENGTH = 4
|
|||
DISPLAY_NAME_RE = re.compile(r"[a-zA-Z0-9_\-']+")
|
||||
DISPLAY_MIN_LENGTH = 2
|
||||
|
||||
|
||||
def validate_username(username):
|
||||
if len(username) < USERNAME_MIN_LENGTH:
|
||||
raise ValidationError('Username too short.')
|
||||
|
|
Loading…
Reference in New Issue