Skip to content

Commit 9478c5e

Browse files
committed
refac
1 parent 62e7e0b commit 9478c5e

3 files changed

Lines changed: 47 additions & 1 deletion

File tree

backend/open_webui/config.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,18 @@ def __getattr__(self, key):
642642
os.environ.get("OAUTH_UPDATE_PICTURE_ON_LOGIN", "False").lower() == "true",
643643
)
644644

645+
OAUTH_UPDATE_NAME_ON_LOGIN = PersistentConfig(
646+
"OAUTH_UPDATE_NAME_ON_LOGIN",
647+
"oauth.update_name_on_login",
648+
os.environ.get("OAUTH_UPDATE_NAME_ON_LOGIN", "False").lower() == "true",
649+
)
650+
651+
OAUTH_UPDATE_EMAIL_ON_LOGIN = PersistentConfig(
652+
"OAUTH_UPDATE_EMAIL_ON_LOGIN",
653+
"oauth.update_email_on_login",
654+
os.environ.get("OAUTH_UPDATE_EMAIL_ON_LOGIN", "False").lower() == "true",
655+
)
656+
645657
OAUTH_ACCESS_TOKEN_REQUEST_INCLUDE_CLIENT_ID = (
646658
os.environ.get("OAUTH_ACCESS_TOKEN_REQUEST_INCLUDE_CLIENT_ID", "False").lower()
647659
== "true"

backend/open_webui/models/auths.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,10 @@ def update_email_by_id(
197197
with get_db_context(db) as db:
198198
result = db.query(Auth).filter_by(id=id).update({"email": email})
199199
db.commit()
200-
return True if result == 1 else False
200+
if result == 1:
201+
Users.update_user_by_id(id, {"email": email}, db=db)
202+
return True
203+
return False
201204
except Exception:
202205
return False
203206

backend/open_webui/utils/oauth.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
OAUTH_ADMIN_ROLES,
5656
OAUTH_ALLOWED_DOMAINS,
5757
OAUTH_UPDATE_PICTURE_ON_LOGIN,
58+
OAUTH_UPDATE_NAME_ON_LOGIN,
59+
OAUTH_UPDATE_EMAIL_ON_LOGIN,
5860
OAUTH_ACCESS_TOKEN_REQUEST_INCLUDE_CLIENT_ID,
5961
OAUTH_AUDIENCE,
6062
WEBHOOK_URL,
@@ -129,6 +131,8 @@ class OAuthClientInformationFull(OAuthClientMetadata):
129131
auth_manager_config.WEBHOOK_URL = WEBHOOK_URL
130132
auth_manager_config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
131133
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
132136
auth_manager_config.OAUTH_AUDIENCE = OAUTH_AUDIENCE
133137

134138

@@ -1548,6 +1552,33 @@ async def handle_callback(self, request, provider, response, db=None):
15481552
# Update the user object in memory as well,
15491553
# to avoid problems with the ENABLE_OAUTH_GROUP_MANAGEMENT check below
15501554
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+
15511582
# Update profile picture if enabled and different from current
15521583
if auth_manager_config.OAUTH_UPDATE_PICTURE_ON_LOGIN:
15531584
picture_claim = auth_manager_config.OAUTH_PICTURE_CLAIM

0 commit comments

Comments
 (0)