|
55 | 55 | OAUTH_ADMIN_ROLES, |
56 | 56 | OAUTH_ALLOWED_DOMAINS, |
57 | 57 | OAUTH_UPDATE_PICTURE_ON_LOGIN, |
| 58 | + OAUTH_UPDATE_NAME_ON_LOGIN, |
| 59 | + OAUTH_UPDATE_EMAIL_ON_LOGIN, |
58 | 60 | OAUTH_ACCESS_TOKEN_REQUEST_INCLUDE_CLIENT_ID, |
59 | 61 | OAUTH_AUDIENCE, |
60 | 62 | WEBHOOK_URL, |
@@ -129,6 +131,8 @@ class OAuthClientInformationFull(OAuthClientMetadata): |
129 | 131 | auth_manager_config.WEBHOOK_URL = WEBHOOK_URL |
130 | 132 | auth_manager_config.JWT_EXPIRES_IN = JWT_EXPIRES_IN |
131 | 133 | auth_manager_config.OAUTH_UPDATE_PICTURE_ON_LOGIN = OAUTH_UPDATE_PICTURE_ON_LOGIN |
| 134 | +auth_manager_config.OAUTH_UPDATE_NAME_ON_LOGIN = OAUTH_UPDATE_NAME_ON_LOGIN |
| 135 | +auth_manager_config.OAUTH_UPDATE_EMAIL_ON_LOGIN = OAUTH_UPDATE_EMAIL_ON_LOGIN |
132 | 136 | auth_manager_config.OAUTH_AUDIENCE = OAUTH_AUDIENCE |
133 | 137 |
|
134 | 138 |
|
@@ -1548,6 +1552,33 @@ async def handle_callback(self, request, provider, response, db=None): |
1548 | 1552 | # Update the user object in memory as well, |
1549 | 1553 | # to avoid problems with the ENABLE_OAUTH_GROUP_MANAGEMENT check below |
1550 | 1554 | user.role = determined_role |
| 1555 | + |
| 1556 | + if auth_manager_config.OAUTH_UPDATE_NAME_ON_LOGIN: |
| 1557 | + username_claim = auth_manager_config.OAUTH_USERNAME_CLAIM |
| 1558 | + if username_claim: |
| 1559 | + new_name = user_data.get(username_claim) |
| 1560 | + if new_name and new_name != user.name: |
| 1561 | + Users.update_user_by_id(user.id, {"name": new_name}, db=db) |
| 1562 | + user.name = new_name |
| 1563 | + log.debug(f"Updated name for user {user.email}") |
| 1564 | + |
| 1565 | + if auth_manager_config.OAUTH_UPDATE_EMAIL_ON_LOGIN: |
| 1566 | + email_claim = auth_manager_config.OAUTH_EMAIL_CLAIM |
| 1567 | + if email_claim: |
| 1568 | + new_email = user_data.get(email_claim) |
| 1569 | + if new_email and new_email.lower() != user.email.lower(): |
| 1570 | + existing_user = Users.get_user_by_email(new_email, db=db) |
| 1571 | + if existing_user: |
| 1572 | + log.error( |
| 1573 | + f"Cannot update email to {new_email} for user {user.id} because it is already taken." |
| 1574 | + ) |
| 1575 | + else: |
| 1576 | + Auths.update_email_by_id( |
| 1577 | + user.id, new_email.lower(), db=db |
| 1578 | + ) |
| 1579 | + user.email = new_email.lower() |
| 1580 | + log.debug(f"Updated email for user {user.id}") |
| 1581 | + |
1551 | 1582 | # Update profile picture if enabled and different from current |
1552 | 1583 | if auth_manager_config.OAUTH_UPDATE_PICTURE_ON_LOGIN: |
1553 | 1584 | picture_claim = auth_manager_config.OAUTH_PICTURE_CLAIM |
|
0 commit comments