def form_valid(self, form): if form.instance.dob.strftime("%Y-%m-%d") != self.request.POST.get( "dob_again", "") or form.instance.dob.year > 2008: messages.add_message(self.request, messages.ERROR, "Check your date of birth!") return render(self.request, template_name=self.template_name, context=self.get_context_data()) if form.instance.email != self.request.POST.get("email_again", ""): messages.add_message(self.request, messages.ERROR, "Check your email address!") return render(self.request, template_name=self.template_name, context=self.get_context_data()) form.instance.event = self.request.event form.instance.browser = self.request.META.get('HTTP_USER_AGENT', "") form.instance.ip = get_client_ip(self.request) form.instance.cookie = self.request.COOKIES.get("pretix_csrftoken") try: with transaction.atomic(): ret = super().form_valid(form) except IntegrityError: messages.add_message(self.request, messages.ERROR, "This email address is already registered!") return render(self.request, template_name=self.template_name, context=self.get_context_data()) send_mail(event_id=self.request.event.id, to=[self.request.POST["email"]], subject=self.email_subject, body=self.email_message % self.request.POST.dict()) return ret
def ratelimit_key(self): if not settings.HAS_REDIS: return None client_ip = get_client_ip(self.request) if not client_ip: return None try: client_ip = ipaddress.ip_address(client_ip) except ValueError: # Web server not set up correctly return None if client_ip.is_private: # This is the private IP of the server, web server not set up correctly return None return 'pretix_customer_registration_{}'.format(hashlib.sha1(str(client_ip).encode()).hexdigest())