1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- from recaptcha.client.captcha import displayhtml, submit as submit_recaptcha
- from django.utils.translation import ugettext_lazy as _
- from misago.conf import settings
- from misago.core import forms
- def validate_recaptcha(request):
- raise NotImplementedError('reCaptcha 2 is not implemented')
- answer = self.cleaned_data['qa_answer'].lower()
- for predefined_answer in settings.qa_answers.lower().splitlines():
- predefined_answer = predefined_answer.strip().lower()
- if answer == predefined_answer:
- self.has_qa_captcha = False
- return self.cleaned_data['qa_answer']
- else:
- raise forms.ValidationError(_("Entered answer is incorrect."))
- def validate_qacaptcha(request):
- raise NotImplementedError('Q&A captcha is not implemented')
- def validate_nocaptcha(request):
- return # no captcha means no validation
- CAPTCHA_TESTS = {
- 're': validate_recaptcha,
- 'qa': validate_qacaptcha,
- 'no': validate_nocaptcha,
- }
- def validate_captcha(request):
- if not session_already_passed_test(request.session):
- # run test and if it didn't raise validation error,
- # mark session as passing so we don't troll uses anymore
- CAPTCHA_TESTS[settings['captcha_type']](request)
- mark_session_as_passing(request.session)
- """
- Q&A
- """
- def clean_qa_answer(self):
- answer = self.cleaned_data['qa_answer'].lower()
- for predefined_answer in settings.qa_answers.lower().splitlines():
- predefined_answer = predefined_answer.strip().lower()
- if answer == predefined_answer:
- self.has_qa_captcha = False
- mark_session_as_passing(self.session)
- return self.cleaned_data['qa_answer']
- else:
- raise forms.ValidationError(_("Entered answer is incorrect."))
- def add_qa_test_to_form(request, test_passed):
- qa_answer_field = forms.CharField(label=settings.qa_question,
- help_text=settings.qa_help_text,
- required=(not test_passed))
- extra_fields = {
- 'passed_qa_captcha': test_passed,
- 'has_qa_captcha': True,
- 'qa_answer': qa_answer_field,
- 'clean_qa_answer': clean_qa_answer,
- }
- if test_passed:
- extra_fields['has_qa_captcha'] = False
- extra_fields.pop('clean_qa_answer')
- return extra_fields
- """
- Session utils
- """
- def session_already_passed_test(session):
- return session.get('passed_captcha')
- def mark_session_as_passing(session):
- session['passed_captcha'] = True
|