from django.contrib.auth import get_user_model from ..users.setupnewuser import setup_new_user User = get_user_model() def get_or_create_user(request, user_data): try: user = User.objects.get(sso_id=user_data["id"]) if user_needs_updating(user, user_data): update_user(user, user_data) return user except User.DoesNotExist: user = User.objects.create_user( user_data["username"], user_data["email"], is_active=user_data.get("is_active", True), sso_id=user_data["id"], ) user.update_acl_key() setup_new_user(request.settings, user) return user def user_needs_updating(user, user_data): return any( ( user.username != user_data["username"], user.email != user_data["email"], user.is_active != user_data.get("is_active", user.is_active), ) ) def update_user(user, user_data): if user.username != user_data["username"]: user.set_username(user_data["username"]) if user.email != user_data["email"]: user.set_email(user_data["email"]) if user.is_active != user_data.get("is_active", user.is_active): user.is_active = user_data["is_active"] user.save()