|
7 | 7 | from django.conf import settings |
8 | 8 | from social_core.backends.azuread_tenant import AzureADTenantOAuth2 |
9 | 9 | from social_core.backends.google import GoogleOAuth2 |
| 10 | +from social_core.backends.open_id_connect import OpenIdConnectAuth |
10 | 11 |
|
11 | 12 | from dojo.authorization.roles_permissions import Permissions, Roles |
12 | 13 | from dojo.models import Dojo_Group, Dojo_Group_Member, Product, Product_Member, Product_Type, Role |
@@ -106,6 +107,31 @@ def update_azure_groups(backend, uid, user=None, social=None, *args, **kwargs): |
106 | 107 | cleanup_old_groups_for_user(user, group_names) |
107 | 108 |
|
108 | 109 |
|
| 110 | +def update_oidc_groups(backend, uid, user=None, social=None, *args, **kwargs): |
| 111 | + if settings.OIDC_AUTH_ENABLED and settings.DD_SOCIAL_AUTH_OIDC_GET_GROUPS and isinstance(backend, OpenIdConnectAuth): |
| 112 | + response = kwargs.get("response", {}) |
| 113 | + group_names = response.get("groups", []) |
| 114 | + |
| 115 | + if not group_names: |
| 116 | + logger.warning("No 'groups' claim found in Dex OIDC response. Skipping group assignment.") |
| 117 | + return |
| 118 | + logger.debug(f"Dex OIDC groups received: {group_names}") |
| 119 | + filtered_group_names = [] |
| 120 | + group_filter = getattr(settings, "OIDC_GROUPS_FILTER", None) |
| 121 | + for group_name in group_names: |
| 122 | + try: |
| 123 | + if group_filter and not re.search(group_filter, group_name): |
| 124 | + logger.debug(f"Skipping group '{group_name}' due to OIDC_GROUPS_FILTER: {group_filter}") |
| 125 | + continue |
| 126 | + filtered_group_names.append(group_name) |
| 127 | + except Exception as e: |
| 128 | + logger.error(f"Error processing group '{group_name}': {e}") |
| 129 | + if filtered_group_names: |
| 130 | + assign_user_to_groups(user, filtered_group_names, Dojo_Group.OIDC) |
| 131 | + if getattr(settings, "OIDC_CLEANUP_GROUPS", False): |
| 132 | + cleanup_old_groups_for_user(user, filtered_group_names) |
| 133 | + |
| 134 | + |
109 | 135 | def is_group_id(group): |
110 | 136 | return bool(re.search(r"^[a-zA-Z0-9]{8,}-[a-zA-Z0-9]{4,}-[a-zA-Z0-9]{4,}-[a-zA-Z0-9]{4,}-[a-zA-Z0-9]{12,}$", group)) |
111 | 137 |
|
|
0 commit comments