Add ENABLE_OAUTH_GROUP_CREATION flag for JIT group creation with OAuth group updates enabled
This commit is contained in:
		
							parent
							
								
									a67e5f725f
								
							
						
					
					
						commit
						1dbf4d0461
					
				|  | @ -15,7 +15,7 @@ from starlette.responses import RedirectResponse | |||
| 
 | ||||
| from open_webui.models.auths import Auths | ||||
| 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 ( | ||||
|     DEFAULT_USER_ROLE, | ||||
|     ENABLE_OAUTH_SIGNUP, | ||||
|  | @ -23,6 +23,7 @@ from open_webui.config import ( | |||
|     OAUTH_PROVIDERS, | ||||
|     ENABLE_OAUTH_ROLE_MANAGEMENT, | ||||
|     ENABLE_OAUTH_GROUP_MANAGEMENT, | ||||
|     ENABLE_OAUTH_GROUP_CREATION, | ||||
|     OAUTH_ROLES_CLAIM, | ||||
|     OAUTH_GROUPS_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.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_CREATION = ENABLE_OAUTH_GROUP_CREATION | ||||
| auth_manager_config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM | ||||
| auth_manager_config.OAUTH_GROUPS_CLAIM = OAUTH_GROUPS_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) | ||||
|         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"User oauth groups: {user_oauth_groups}") | ||||
|         log.debug(f"User's current groups: {[g.name for g in user_current_groups]}") | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue