captcha.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from ....admin.forms import YesNoSwitch
  4. from .base import ChangeSettingsForm
  5. class ChangeCaptchaSettingsForm(ChangeSettingsForm):
  6. settings = [
  7. "captcha_type",
  8. "recaptcha_site_key",
  9. "recaptcha_secret_key",
  10. "qa_question",
  11. "qa_help_text",
  12. "qa_answers",
  13. ]
  14. captcha_type = forms.ChoiceField(
  15. label=_("Enable CAPTCHA"),
  16. choices=[
  17. ("no", _("No CAPTCHA")),
  18. ("re", _("reCaptcha")),
  19. ("qa", _("Question and answer")),
  20. ],
  21. widget=forms.RadioSelect(),
  22. )
  23. recaptcha_site_key = forms.CharField(
  24. label=_("Site key"), max_length=100, required=False
  25. )
  26. recaptcha_secret_key = forms.CharField(
  27. label=_("Secret key"), max_length=100, required=False
  28. )
  29. qa_question = forms.CharField(
  30. label=_("Test question"), max_length=100, required=False
  31. )
  32. qa_help_text = forms.CharField(
  33. label=_("Question help text"), max_length=250, required=False
  34. )
  35. qa_answers = forms.CharField(
  36. label=_("Valid answers"),
  37. help_text=_("Enter each answer in new line. Answers are case-insensitive."),
  38. widget=forms.Textarea({"rows": 4}),
  39. max_length=250,
  40. required=False,
  41. )
  42. def clean(self):
  43. cleaned_data = super().clean()
  44. if cleaned_data.get("captcha_type") == "re":
  45. if not cleaned_data.get("recaptcha_site_key"):
  46. self.add_error(
  47. "recaptcha_site_key",
  48. _(
  49. "You need to enter site key if "
  50. "selected CAPTCHA type is reCaptcha."
  51. ),
  52. )
  53. if not cleaned_data.get("recaptcha_secret_key"):
  54. self.add_error(
  55. "recaptcha_secret_key",
  56. _(
  57. "You need to enter secret key if "
  58. "selected CAPTCHA type is reCaptcha."
  59. ),
  60. )
  61. if cleaned_data.get("captcha_type") == "qa":
  62. if not cleaned_data.get("qa_question"):
  63. self.add_error(
  64. "qa_question",
  65. _("You need to set question if selected CAPTCHA type is Q&A."),
  66. )
  67. if not cleaned_data.get("qa_answers"):
  68. self.add_error(
  69. "qa_answers",
  70. _(
  71. "You need to set question answers if "
  72. "selected CAPTCHA type is Q&A."
  73. ),
  74. )
  75. return cleaned_data