mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
Merge pull request #13039 from taylorwilsdon/jit_oauth_groups
feat: Just-in-Time Group Creation for OAuth Groups
This commit is contained in:
commit
27936014b0
@ -15,7 +15,7 @@ from starlette.responses import RedirectResponse
|
|||||||
|
|
||||||
from open_webui.models.auths import Auths
|
from open_webui.models.auths import Auths
|
||||||
from open_webui.models.users import Users
|
from open_webui.models.users import Users
|
||||||
from open_webui.models.groups import Groups, GroupModel, GroupUpdateForm
|
from open_webui.models.groups import Groups, GroupModel, GroupUpdateForm, GroupForm
|
||||||
from open_webui.config import (
|
from open_webui.config import (
|
||||||
DEFAULT_USER_ROLE,
|
DEFAULT_USER_ROLE,
|
||||||
ENABLE_OAUTH_SIGNUP,
|
ENABLE_OAUTH_SIGNUP,
|
||||||
@ -23,6 +23,7 @@ from open_webui.config import (
|
|||||||
OAUTH_PROVIDERS,
|
OAUTH_PROVIDERS,
|
||||||
ENABLE_OAUTH_ROLE_MANAGEMENT,
|
ENABLE_OAUTH_ROLE_MANAGEMENT,
|
||||||
ENABLE_OAUTH_GROUP_MANAGEMENT,
|
ENABLE_OAUTH_GROUP_MANAGEMENT,
|
||||||
|
ENABLE_OAUTH_GROUP_CREATION,
|
||||||
OAUTH_ROLES_CLAIM,
|
OAUTH_ROLES_CLAIM,
|
||||||
OAUTH_GROUPS_CLAIM,
|
OAUTH_GROUPS_CLAIM,
|
||||||
OAUTH_EMAIL_CLAIM,
|
OAUTH_EMAIL_CLAIM,
|
||||||
@ -57,6 +58,7 @@ auth_manager_config.ENABLE_OAUTH_SIGNUP = ENABLE_OAUTH_SIGNUP
|
|||||||
auth_manager_config.OAUTH_MERGE_ACCOUNTS_BY_EMAIL = OAUTH_MERGE_ACCOUNTS_BY_EMAIL
|
auth_manager_config.OAUTH_MERGE_ACCOUNTS_BY_EMAIL = OAUTH_MERGE_ACCOUNTS_BY_EMAIL
|
||||||
auth_manager_config.ENABLE_OAUTH_ROLE_MANAGEMENT = ENABLE_OAUTH_ROLE_MANAGEMENT
|
auth_manager_config.ENABLE_OAUTH_ROLE_MANAGEMENT = ENABLE_OAUTH_ROLE_MANAGEMENT
|
||||||
auth_manager_config.ENABLE_OAUTH_GROUP_MANAGEMENT = ENABLE_OAUTH_GROUP_MANAGEMENT
|
auth_manager_config.ENABLE_OAUTH_GROUP_MANAGEMENT = ENABLE_OAUTH_GROUP_MANAGEMENT
|
||||||
|
auth_manager_config.ENABLE_OAUTH_GROUP_CREATION = ENABLE_OAUTH_GROUP_CREATION
|
||||||
auth_manager_config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM
|
auth_manager_config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM
|
||||||
auth_manager_config.OAUTH_GROUPS_CLAIM = OAUTH_GROUPS_CLAIM
|
auth_manager_config.OAUTH_GROUPS_CLAIM = OAUTH_GROUPS_CLAIM
|
||||||
auth_manager_config.OAUTH_EMAIL_CLAIM = OAUTH_EMAIL_CLAIM
|
auth_manager_config.OAUTH_EMAIL_CLAIM = OAUTH_EMAIL_CLAIM
|
||||||
@ -152,6 +154,44 @@ class OAuthManager:
|
|||||||
user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
|
user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
|
||||||
all_available_groups: list[GroupModel] = Groups.get_groups()
|
all_available_groups: list[GroupModel] = Groups.get_groups()
|
||||||
|
|
||||||
|
# Create groups if they don't exist and creation is enabled
|
||||||
|
if auth_manager_config.ENABLE_OAUTH_GROUP_CREATION:
|
||||||
|
log.debug("Checking for missing groups to create...")
|
||||||
|
all_group_names = {g.name for g in all_available_groups}
|
||||||
|
groups_created = False
|
||||||
|
# Determine creator ID: Prefer admin, fallback to current user if no admin exists
|
||||||
|
admin_user = Users.get_admin_user()
|
||||||
|
creator_id = admin_user.id if admin_user else user.id
|
||||||
|
log.debug(f"Using creator ID {creator_id} for potential group creation.")
|
||||||
|
|
||||||
|
for group_name in user_oauth_groups:
|
||||||
|
if group_name not in all_group_names:
|
||||||
|
log.info(f"Group '{group_name}' not found via OAuth claim. Creating group...")
|
||||||
|
try:
|
||||||
|
new_group_form = GroupForm(
|
||||||
|
name=group_name,
|
||||||
|
description=f"Group '{group_name}' created automatically via OAuth.",
|
||||||
|
permissions=default_permissions, # Use default permissions from function args
|
||||||
|
user_ids=[], # Start with no users, user will be added later by subsequent logic
|
||||||
|
)
|
||||||
|
# Use determined creator ID (admin or fallback to current user)
|
||||||
|
created_group = Groups.insert_new_group(creator_id, new_group_form)
|
||||||
|
if created_group:
|
||||||
|
log.info(f"Successfully created group '{group_name}' with ID {created_group.id} using creator ID {creator_id}")
|
||||||
|
groups_created = True
|
||||||
|
# Add to local set to prevent duplicate creation attempts in this run
|
||||||
|
all_group_names.add(group_name)
|
||||||
|
else:
|
||||||
|
log.error(f"Failed to create group '{group_name}' via OAuth.")
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"Error creating group '{group_name}' via OAuth: {e}")
|
||||||
|
|
||||||
|
# Refresh the list of all available groups if any were created
|
||||||
|
if groups_created:
|
||||||
|
all_available_groups = Groups.get_groups()
|
||||||
|
log.debug("Refreshed list of all available groups after creation.")
|
||||||
|
|
||||||
|
|
||||||
log.debug(f"Oauth Groups claim: {oauth_claim}")
|
log.debug(f"Oauth Groups claim: {oauth_claim}")
|
||||||
log.debug(f"User oauth groups: {user_oauth_groups}")
|
log.debug(f"User oauth groups: {user_oauth_groups}")
|
||||||
log.debug(f"User's current groups: {[g.name for g in user_current_groups]}")
|
log.debug(f"User's current groups: {[g.name for g in user_current_groups]}")
|
||||||
|
Loading…
Reference in New Issue
Block a user