Skip to content

Commit

Permalink
Merge pull request #294 from UW-GAC/feature/update-username-email-on-…
Browse files Browse the repository at this point in the history
…login

Update django username and email to match drupal username and email on login
  • Loading branch information
jmcarson authored Oct 6, 2023
2 parents 8a6f7d6 + 3cce389 commit 7638b63
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 7 deletions.
27 changes: 24 additions & 3 deletions gregor_django/users/adapters.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,36 @@ class SocialAccountAdapter(DefaultSocialAccountAdapter):
def is_open_for_signup(self, request: HttpRequest, sociallogin: Any):
return getattr(settings, "ACCOUNT_ALLOW_REGISTRATION", True)

def update_user_name(self, user, extra_data: Dict):
def update_user_info(self, user, extra_data: Dict):
drupal_username = extra_data.get("preferred_username")
drupal_email = extra_data.get("email")
first_name = extra_data.get("first_name")
last_name = extra_data.get("last_name")
full_name = " ".join(part for part in (first_name, last_name) if part)
user_changed = False
if user.name != full_name:
logger.info(
f"[SocialAccountAdatpter:update_user_name] user {user} name updated from {user.name} to {full_name}"
f"[SocialAccountAdatpter:update_user_name] user {user} "
f"name updated from {user.name} to {full_name}"
)
user.name = full_name
user_changed = True
if user.username != drupal_username:
logger.info(
f"[SocialAccountAdatpter:update_user_name] user {user} "
f"username updated from {user.username} to {drupal_username}"
)
user.username = drupal_username
user_changed = True
if user.email != drupal_email:
logger.info(
f"[SocialAccountAdatpter:update_user_name] user {user}"
f" email updated from {user.email} to {drupal_email}"
)
user.email = drupal_email
user_changed = True

if user_changed is True:
user.save()

def update_user_partner_groups(self, user, extra_data: Dict):
Expand Down Expand Up @@ -172,7 +193,7 @@ def update_user_data(self, sociallogin: Any):
extra_data = sociallogin.account.extra_data
user = sociallogin.user

self.update_user_name(user, extra_data)
self.update_user_info(user, extra_data)
self.update_user_research_centers(user, extra_data)
self.update_user_partner_groups(user, extra_data)
self.update_user_groups(user, extra_data)
31 changes: 27 additions & 4 deletions gregor_django/users/tests/test_adapters.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,36 +36,59 @@ def test_drupal_social_login_adapter(self):
User = get_user_model()
user = User()
old_name = "Old Name"
old_username = "test"
old_email = "[email protected]"
setattr(user, account_settings.USER_MODEL_USERNAME_FIELD, "test")
setattr(user, "name", "Old Name")
setattr(user, account_settings.USER_MODEL_EMAIL_FIELD, "[email protected]")

account = SocialAccount(
provider="drupal_oauth_provider",
uid="123",
extra_data=dict(first_name="Old", last_name="Name"),
extra_data=dict(
first_name="Old",
last_name="Name",
email=old_email,
preferred_username=old_username,
),
)
sociallogin = SocialLogin(user=user, account=account)
complete_social_login(request, sociallogin)

user = User.objects.get(**{account_settings.USER_MODEL_USERNAME_FIELD: "test"})
assert SocialAccount.objects.filter(user=user, uid=account.uid).exists() is True
assert user.name == old_name
assert user.username == old_username
assert user.email == old_email

def test_update_user_research_centers(self):
def test_update_user_info(self):
adapter = SocialAccountAdapter()

User = get_user_model()
user = User()
new_name = "New Name"
new_first_name = "New"
new_last_name = "Name"
new_name = f"{new_first_name} {new_last_name}"
new_email = "[email protected]"
new_username = "newusername"
setattr(user, account_settings.USER_MODEL_USERNAME_FIELD, "test")
setattr(user, "name", "Old Name")
setattr(user, account_settings.USER_MODEL_EMAIL_FIELD, "[email protected]")

user.save()

adapter.update_user_name(user, dict(first_name="New", last_name="Name"))
adapter.update_user_info(
user,
dict(
first_name=new_first_name,
last_name=new_last_name,
email=new_email,
preferred_username=new_username,
),
)
assert user.name == new_name
assert user.email == new_email
assert user.username == new_username

def test_update_user_research_centers_add(self):
adapter = SocialAccountAdapter()
Expand Down

0 comments on commit 7638b63

Please sign in to comment.