in django_airavata/apps/auth/backends.py [0:0]
def _get_or_create_user(self, sub, username):
try:
user_profile = models.UserProfile.objects.get(
userinfo__claim='sub', userinfo__value=sub)
return user_profile.user
except models.UserProfile.DoesNotExist:
try:
# For backwards compatibility, lookup by username
user = User.objects.get(username=username)
# Make sure there is a user_profile with the sub claim, which
# will be used to do the lookup next time
if not hasattr(user, 'user_profile'):
user_profile = models.UserProfile(user=user)
user_profile.save()
user_profile.userinfo_set.create(
claim='sub', value=sub)
else:
userinfo = user.user_profile.userinfo_set.get(claim='sub')
logger.warning(
f"User {username} exists but sub claims don't match: "
f"old={userinfo.value}, new={sub}. Updating to new "
"sub claim.")
userinfo.value = sub
userinfo.save()
return user
except User.DoesNotExist:
user = User(username=username)
user.save()
user_profile = models.UserProfile(user=user)
user_profile.save()
user_profile.userinfo_set.create(claim='sub', value=sub)
return user