sso.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django import forms
  2. from django.utils.crypto import get_random_string
  3. from django.utils.translation import gettext_lazy as _
  4. from ....admin.forms import YesNoSwitch
  5. from .base import ChangeSettingsForm
  6. class ChangeSSOSettingsForm(ChangeSettingsForm):
  7. settings = ["enable_sso", "sso_public_key", "sso_private_key", "sso_url"]
  8. enable_sso = YesNoSwitch(
  9. label=_("Enable Single Sign-On"),
  10. help_text=_(
  11. "Enabling SSO will make login option redirect users to the server URL "
  12. "configured below. It will also disable option to register on forum, "
  13. "change username, email or passward, as those features will be delegated "
  14. "to the 3rd party site."
  15. ),
  16. )
  17. sso_public_key = forms.CharField(
  18. label=_("Public key"),
  19. help_text=_(
  20. "Leave this field empty for Misago to generate this key on form submission."
  21. ),
  22. max_length=64,
  23. required=False,
  24. )
  25. sso_private_key = forms.CharField(
  26. label=_("Private key"),
  27. help_text=_(
  28. "Leave this field empty for Misago to generate this key on form submission."
  29. ),
  30. max_length=64,
  31. required=False,
  32. )
  33. sso_url = forms.URLField(label=_("Server URL"), max_length=255, required=False)
  34. def clean(self):
  35. cleaned_data = super().clean()
  36. if cleaned_data.get("enable_sso"):
  37. if not cleaned_data.get("sso_public_key"):
  38. cleaned_data["sso_public_key"] = get_random_string(64)
  39. if not cleaned_data.get("sso_private_key"):
  40. cleaned_data["sso_private_key"] = get_random_string(64)
  41. if not cleaned_data.get("sso_url"):
  42. self.add_error(
  43. "sso_url", _("You need to enter server URL to enable SSO.")
  44. )
  45. return cleaned_data