sources: allow uuid or slug to be used for retrieving a source (#12780)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
		@ -66,6 +66,7 @@ class KerberosSourceViewSet(UsedByMixin, ModelViewSet):
 | 
				
			|||||||
    serializer_class = KerberosSourceSerializer
 | 
					    serializer_class = KerberosSourceSerializer
 | 
				
			||||||
    lookup_field = "slug"
 | 
					    lookup_field = "slug"
 | 
				
			||||||
    filterset_fields = [
 | 
					    filterset_fields = [
 | 
				
			||||||
 | 
					        "pbm_uuid",
 | 
				
			||||||
        "name",
 | 
					        "name",
 | 
				
			||||||
        "slug",
 | 
					        "slug",
 | 
				
			||||||
        "enabled",
 | 
					        "enabled",
 | 
				
			||||||
 | 
				
			|||||||
@ -110,6 +110,7 @@ class LDAPSourceViewSet(UsedByMixin, ModelViewSet):
 | 
				
			|||||||
    serializer_class = LDAPSourceSerializer
 | 
					    serializer_class = LDAPSourceSerializer
 | 
				
			||||||
    lookup_field = "slug"
 | 
					    lookup_field = "slug"
 | 
				
			||||||
    filterset_fields = [
 | 
					    filterset_fields = [
 | 
				
			||||||
 | 
					        "pbm_uuid",
 | 
				
			||||||
        "name",
 | 
					        "name",
 | 
				
			||||||
        "slug",
 | 
					        "slug",
 | 
				
			||||||
        "enabled",
 | 
					        "enabled",
 | 
				
			||||||
 | 
				
			|||||||
@ -152,6 +152,7 @@ class OAuthSourceFilter(FilterSet):
 | 
				
			|||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = OAuthSource
 | 
					        model = OAuthSource
 | 
				
			||||||
        fields = [
 | 
					        fields = [
 | 
				
			||||||
 | 
					            "pbm_uuid",
 | 
				
			||||||
            "name",
 | 
					            "name",
 | 
				
			||||||
            "slug",
 | 
					            "slug",
 | 
				
			||||||
            "enabled",
 | 
					            "enabled",
 | 
				
			||||||
 | 
				
			|||||||
@ -52,6 +52,7 @@ class PlexSourceViewSet(UsedByMixin, ModelViewSet):
 | 
				
			|||||||
    serializer_class = PlexSourceSerializer
 | 
					    serializer_class = PlexSourceSerializer
 | 
				
			||||||
    lookup_field = "slug"
 | 
					    lookup_field = "slug"
 | 
				
			||||||
    filterset_fields = [
 | 
					    filterset_fields = [
 | 
				
			||||||
 | 
					        "pbm_uuid",
 | 
				
			||||||
        "name",
 | 
					        "name",
 | 
				
			||||||
        "slug",
 | 
					        "slug",
 | 
				
			||||||
        "enabled",
 | 
					        "enabled",
 | 
				
			||||||
 | 
				
			|||||||
@ -44,6 +44,7 @@ class SAMLSourceViewSet(UsedByMixin, ModelViewSet):
 | 
				
			|||||||
    serializer_class = SAMLSourceSerializer
 | 
					    serializer_class = SAMLSourceSerializer
 | 
				
			||||||
    lookup_field = "slug"
 | 
					    lookup_field = "slug"
 | 
				
			||||||
    filterset_fields = [
 | 
					    filterset_fields = [
 | 
				
			||||||
 | 
					        "pbm_uuid",
 | 
				
			||||||
        "name",
 | 
					        "name",
 | 
				
			||||||
        "slug",
 | 
					        "slug",
 | 
				
			||||||
        "enabled",
 | 
					        "enabled",
 | 
				
			||||||
 | 
				
			|||||||
@ -53,6 +53,6 @@ class SCIMSourceViewSet(UsedByMixin, ModelViewSet):
 | 
				
			|||||||
    queryset = SCIMSource.objects.all()
 | 
					    queryset = SCIMSource.objects.all()
 | 
				
			||||||
    serializer_class = SCIMSourceSerializer
 | 
					    serializer_class = SCIMSourceSerializer
 | 
				
			||||||
    lookup_field = "slug"
 | 
					    lookup_field = "slug"
 | 
				
			||||||
    filterset_fields = ["name", "slug"]
 | 
					    filterset_fields = ["pbm_uuid", "name", "slug"]
 | 
				
			||||||
    search_fields = ["name", "slug", "token__identifier", "token__user__username"]
 | 
					    search_fields = ["name", "slug", "token__identifier", "token__user__username"]
 | 
				
			||||||
    ordering = ["name"]
 | 
					    ordering = ["name"]
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										30
									
								
								schema.yml
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								schema.yml
									
									
									
									
									
								
							@ -26248,6 +26248,11 @@ paths:
 | 
				
			|||||||
        name: password_login_update_internal_password
 | 
					        name: password_login_update_internal_password
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
          type: boolean
 | 
					          type: boolean
 | 
				
			||||||
 | 
					      - in: query
 | 
				
			||||||
 | 
					        name: pbm_uuid
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
 | 
					          format: uuid
 | 
				
			||||||
      - in: query
 | 
					      - in: query
 | 
				
			||||||
        name: realm
 | 
					        name: realm
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
@ -26620,6 +26625,11 @@ paths:
 | 
				
			|||||||
        name: password_login_update_internal_password
 | 
					        name: password_login_update_internal_password
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
          type: boolean
 | 
					          type: boolean
 | 
				
			||||||
 | 
					      - in: query
 | 
				
			||||||
 | 
					        name: pbm_uuid
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
 | 
					          format: uuid
 | 
				
			||||||
      - in: query
 | 
					      - in: query
 | 
				
			||||||
        name: peer_certificate
 | 
					        name: peer_certificate
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
@ -27049,6 +27059,11 @@ paths:
 | 
				
			|||||||
        description: Number of results to return per page.
 | 
					        description: Number of results to return per page.
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
          type: integer
 | 
					          type: integer
 | 
				
			||||||
 | 
					      - in: query
 | 
				
			||||||
 | 
					        name: pbm_uuid
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
 | 
					          format: uuid
 | 
				
			||||||
      - in: query
 | 
					      - in: query
 | 
				
			||||||
        name: policy_engine_mode
 | 
					        name: policy_engine_mode
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
@ -27418,6 +27433,11 @@ paths:
 | 
				
			|||||||
        description: Number of results to return per page.
 | 
					        description: Number of results to return per page.
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
          type: integer
 | 
					          type: integer
 | 
				
			||||||
 | 
					      - in: query
 | 
				
			||||||
 | 
					        name: pbm_uuid
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
 | 
					          format: uuid
 | 
				
			||||||
      - in: query
 | 
					      - in: query
 | 
				
			||||||
        name: policy_engine_mode
 | 
					        name: policy_engine_mode
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
@ -27821,6 +27841,11 @@ paths:
 | 
				
			|||||||
        description: Number of results to return per page.
 | 
					        description: Number of results to return per page.
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
          type: integer
 | 
					          type: integer
 | 
				
			||||||
 | 
					      - in: query
 | 
				
			||||||
 | 
					        name: pbm_uuid
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
 | 
					          format: uuid
 | 
				
			||||||
      - in: query
 | 
					      - in: query
 | 
				
			||||||
        name: policy_engine_mode
 | 
					        name: policy_engine_mode
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
@ -28184,6 +28209,11 @@ paths:
 | 
				
			|||||||
        description: Number of results to return per page.
 | 
					        description: Number of results to return per page.
 | 
				
			||||||
        schema:
 | 
					        schema:
 | 
				
			||||||
          type: integer
 | 
					          type: integer
 | 
				
			||||||
 | 
					      - in: query
 | 
				
			||||||
 | 
					        name: pbm_uuid
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
 | 
					          format: uuid
 | 
				
			||||||
      - name: search
 | 
					      - name: search
 | 
				
			||||||
        required: false
 | 
					        required: false
 | 
				
			||||||
        in: query
 | 
					        in: query
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import { DualSelectPair } from "@goauthentik/elements/ak-dual-select/types";
 | 
				
			|||||||
import { OAuthSource, SourcesApi } from "@goauthentik/api";
 | 
					import { OAuthSource, SourcesApi } from "@goauthentik/api";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const sourceToSelect = (source: OAuthSource) => [
 | 
					const sourceToSelect = (source: OAuthSource) => [
 | 
				
			||||||
    source.slug,
 | 
					    source.pk,
 | 
				
			||||||
    `${source.name} (${source.slug})`,
 | 
					    `${source.name} (${source.slug})`,
 | 
				
			||||||
    source.name,
 | 
					    source.name,
 | 
				
			||||||
    source,
 | 
					    source,
 | 
				
			||||||
@ -37,13 +37,15 @@ export function oauth2SourcesSelector(instanceMappings?: string[]) {
 | 
				
			|||||||
        const oauthSources = new SourcesApi(DEFAULT_CONFIG);
 | 
					        const oauthSources = new SourcesApi(DEFAULT_CONFIG);
 | 
				
			||||||
        const mappings = await Promise.allSettled(
 | 
					        const mappings = await Promise.allSettled(
 | 
				
			||||||
            instanceMappings.map((instanceId) =>
 | 
					            instanceMappings.map((instanceId) =>
 | 
				
			||||||
                oauthSources.sourcesOauthRetrieve({ slug: instanceId }),
 | 
					                oauthSources.sourcesOauthList({ pbmUuid: instanceId }),
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return mappings
 | 
					        return mappings
 | 
				
			||||||
            .filter((s) => s.status === "fulfilled")
 | 
					            .filter((s) => s.status === "fulfilled")
 | 
				
			||||||
            .map((s) => s.value)
 | 
					            .map((s) => s.value)
 | 
				
			||||||
 | 
					            .filter((s) => s.pagination.count > 0)
 | 
				
			||||||
 | 
					            .map((s) => s.results[0])
 | 
				
			||||||
            .map(sourceToSelect);
 | 
					            .map(sourceToSelect);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user