user.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.contrib.auth import get_user_model
  2. from ..users.setupnewuser import setup_new_user
  3. User = get_user_model()
  4. def get_or_create_user(request, user_data):
  5. try:
  6. user = User.objects.get(sso_id=user_data["id"])
  7. if user_needs_updating(user, user_data):
  8. update_user(user, user_data)
  9. return user
  10. except User.DoesNotExist:
  11. user = User.objects.create_user(
  12. user_data["username"],
  13. user_data["email"],
  14. is_active=user_data.get("is_active", True),
  15. sso_id=user_data["id"],
  16. )
  17. user.update_acl_key()
  18. setup_new_user(request.settings, user)
  19. return user
  20. def user_needs_updating(user, user_data):
  21. return any(
  22. (
  23. user.username != user_data["username"],
  24. user.email != user_data["email"],
  25. user.is_active != user_data.get("is_active", user.is_active),
  26. )
  27. )
  28. def update_user(user, user_data):
  29. if user.username != user_data["username"]:
  30. user.set_username(user_data["username"])
  31. if user.email != user_data["email"]:
  32. user.set_email(user_data["email"])
  33. if user.is_active != user_data.get("is_active", user.is_active):
  34. user.is_active = user_data["is_active"]
  35. user.save()