base.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from ....admin.forms import ColorField, YesNoSwitch
  4. from ...models import SocialAuthProvider
  5. from ..ordering import get_next_free_order
  6. class ProviderForm(forms.ModelForm):
  7. button_text = forms.CharField(label=_("Button text"), required=False)
  8. button_color = ColorField(label=_("Button color"), required=False)
  9. is_active = YesNoSwitch(label=_("Enable this provider"))
  10. class Meta:
  11. model = SocialAuthProvider
  12. fields = ["button_text", "button_color", "is_active"]
  13. def __init__(self, *args, **kwargs):
  14. self.request = kwargs.pop("request")
  15. super().__init__(*args, **kwargs)
  16. def save(self):
  17. settings = {}
  18. for setting, value in self.cleaned_data.items():
  19. if setting not in ["button_text", "button_color", "is_active"]:
  20. settings[setting] = value
  21. self.instance.settings = settings
  22. if "is_active" in self.changed_data and self.cleaned_data.get("is_active"):
  23. self.instance.order = get_next_free_order()
  24. self.instance.save()
  25. class OAuthProviderForm(ProviderForm):
  26. associate_by_email = YesNoSwitch(
  27. label=_("Associate existing users by email"),
  28. help_text=_(
  29. "Enabling this option will result in the user being signed in if their "
  30. "forum account was registered using same e-mail address as used on the "
  31. "social site. Otherwise they will be asked to specify a different e-mail "
  32. "to continue sign in using social site."
  33. ),
  34. )
  35. def clean(self):
  36. cleaned_data = super().clean()
  37. if cleaned_data.get("is_active"):
  38. if not cleaned_data.get("key"):
  39. self.add_error("key", _("This field is required."))
  40. if not cleaned_data.get("secret"):
  41. self.add_error("secret", _("This field is required."))
  42. return cleaned_data