client.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from django.contrib.auth import get_user_model
  2. from django.http import Http404
  3. from simple_sso.sso_client.client import AuthenticateView, Client, LoginView
  4. from ..users.authbackends import MisagoBackend
  5. from ..users.setupnewuser import setup_new_user
  6. User = get_user_model()
  7. class MisagoAuthenticateView(AuthenticateView):
  8. @property
  9. def client(self):
  10. return create_configured_client(self.request)
  11. def get(self, request):
  12. if not request.settings.enable_sso:
  13. raise Http404()
  14. return super().get(request)
  15. class MisagoLoginView(LoginView):
  16. @property
  17. def client(self):
  18. return create_configured_client(self.request)
  19. def get(self, request):
  20. if not request.settings.enable_sso:
  21. raise Http404()
  22. return super().get(request)
  23. def create_configured_client(request):
  24. settings = request.settings
  25. return ClientMisago(
  26. settings.sso_server,
  27. settings.sso_public_key,
  28. settings.sso_private_key,
  29. request=request,
  30. )
  31. class ClientMisago(Client):
  32. def __init__(self, *args, **kwargs):
  33. self.request = kwargs.pop("request")
  34. super().__init__(*args, **kwargs)
  35. self.backend = "%s.%s" % (MisagoBackend.__module__, MisagoBackend.__name__)
  36. def build_user(self, user_data):
  37. try:
  38. return User.objects.get_by_email(user_data["email"])
  39. except User.DoesNotExist:
  40. user = User.objects.create_user(user_data["username"], user_data["email"])
  41. user.update_acl_key()
  42. setup_new_user(self.request.settings, user)
  43. return user