providers/saml: add metadata download link to api
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		| @ -4,11 +4,17 @@ from xml.etree.ElementTree import ParseError  # nosec | |||||||
| from defusedxml.ElementTree import fromstring | from defusedxml.ElementTree import fromstring | ||||||
| from django.http.response import HttpResponse | from django.http.response import HttpResponse | ||||||
| from django.shortcuts import get_object_or_404 | from django.shortcuts import get_object_or_404 | ||||||
|  | from django.urls import reverse | ||||||
| from django.utils.translation import gettext_lazy as _ | from django.utils.translation import gettext_lazy as _ | ||||||
| from drf_spectacular.types import OpenApiTypes | from drf_spectacular.types import OpenApiTypes | ||||||
| from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema | from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema | ||||||
| from rest_framework.decorators import action | from rest_framework.decorators import action | ||||||
| from rest_framework.fields import CharField, FileField, ReadOnlyField | from rest_framework.fields import ( | ||||||
|  |     CharField, | ||||||
|  |     FileField, | ||||||
|  |     ReadOnlyField, | ||||||
|  |     SerializerMethodField, | ||||||
|  | ) | ||||||
| from rest_framework.parsers import MultiPartParser | from rest_framework.parsers import MultiPartParser | ||||||
| from rest_framework.permissions import AllowAny | from rest_framework.permissions import AllowAny | ||||||
| from rest_framework.relations import SlugRelatedField | from rest_framework.relations import SlugRelatedField | ||||||
| @ -37,6 +43,15 @@ LOGGER = get_logger() | |||||||
| class SAMLProviderSerializer(ProviderSerializer): | class SAMLProviderSerializer(ProviderSerializer): | ||||||
|     """SAMLProvider Serializer""" |     """SAMLProvider Serializer""" | ||||||
|  |  | ||||||
|  |     metadata_download_url = SerializerMethodField() | ||||||
|  |  | ||||||
|  |     def get_metadata_download_url(self, instance: SAMLProvider) -> str: | ||||||
|  |         """Get metadata download URL""" | ||||||
|  |         return ( | ||||||
|  |             reverse("authentik_api:samlprovider-metadata", kwargs={"pk": instance.pk}) | ||||||
|  |             + "?download" | ||||||
|  |         ) | ||||||
|  |  | ||||||
|     class Meta: |     class Meta: | ||||||
|  |  | ||||||
|         model = SAMLProvider |         model = SAMLProvider | ||||||
| @ -54,6 +69,7 @@ class SAMLProviderSerializer(ProviderSerializer): | |||||||
|             "signing_kp", |             "signing_kp", | ||||||
|             "verification_kp", |             "verification_kp", | ||||||
|             "sp_binding", |             "sp_binding", | ||||||
|  |             "metadata_download_url", | ||||||
|         ] |         ] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -26576,12 +26576,16 @@ components: | |||||||
|           title: Service Provider Binding |           title: Service Provider Binding | ||||||
|           description: This determines how authentik sends the response back to the |           description: This determines how authentik sends the response back to the | ||||||
|             Service Provider. |             Service Provider. | ||||||
|  |         metadata_download_url: | ||||||
|  |           type: string | ||||||
|  |           readOnly: true | ||||||
|       required: |       required: | ||||||
|       - acs_url |       - acs_url | ||||||
|       - assigned_application_name |       - assigned_application_name | ||||||
|       - assigned_application_slug |       - assigned_application_slug | ||||||
|       - authorization_flow |       - authorization_flow | ||||||
|       - component |       - component | ||||||
|  |       - metadata_download_url | ||||||
|       - name |       - name | ||||||
|       - pk |       - pk | ||||||
|       - verbose_name |       - verbose_name | ||||||
|  | |||||||
| @ -157,14 +157,13 @@ export class SAMLProviderViewPage extends LitElement { | |||||||
|                                 </div> |                                 </div> | ||||||
|                                 <div class="pf-c-card__footer"> |                                 <div class="pf-c-card__footer"> | ||||||
|                                     <a class="pf-c-button pf-m-primary" target="_blank" |                                     <a class="pf-c-button pf-m-primary" target="_blank" | ||||||
|                                         href="/api/v2beta/providers/saml/${this.provider.pk}/metadata/?download"> |                                         href=${this.provider.metadataDownloadUrl}> | ||||||
|                                         ${t`Download`} |                                         ${t`Download`} | ||||||
|                                     </a> |                                     </a> | ||||||
|                                     <ak-action-button |                                     <ak-action-button | ||||||
|                                         class="pf-m-secondary" |                                         class="pf-m-secondary" | ||||||
|                                         .apiRequest=${() => { |                                         .apiRequest=${() => { | ||||||
|                                             const path = `/api/v2beta/providers/saml/${this.provider?.pk}/metadata/?download`; |                                             const fullUrl = window.location.origin + this.provider.metadataDownloadUrl; | ||||||
|                                             const fullUrl = window.location.origin + path; |  | ||||||
|                                             return navigator.clipboard.writeText(fullUrl); |                                             return navigator.clipboard.writeText(fullUrl); | ||||||
|                                         }}> |                                         }}> | ||||||
|                                         ${t`Copy download URL`} |                                         ${t`Copy download URL`} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Jens Langhammer
					Jens Langhammer