sources/saml: include metadata download link in API response
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
75404f1345
commit
029d58191e
|
@ -1,7 +1,7 @@
|
||||||
"""Flow Stage API Views"""
|
"""Flow Stage API Views"""
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
from django.urls.base import reverse
|
|
||||||
|
|
||||||
|
from django.urls.base import reverse
|
||||||
from drf_spectacular.utils import extend_schema
|
from drf_spectacular.utils import extend_schema
|
||||||
from rest_framework import mixins
|
from rest_framework import mixins
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
@ -100,7 +100,8 @@ class StageViewSet(
|
||||||
user_settings.initial_data["object_uid"] = str(stage.pk)
|
user_settings.initial_data["object_uid"] = str(stage.pk)
|
||||||
if hasattr(stage, "configure_flow"):
|
if hasattr(stage, "configure_flow"):
|
||||||
user_settings.initial_data["configure_flow"] = reverse(
|
user_settings.initial_data["configure_flow"] = reverse(
|
||||||
"authentik_flows:configure", kwargs={"stage_uuid": stage.uuid.hex},
|
"authentik_flows:configure",
|
||||||
|
kwargs={"stage_uuid": stage.uuid.hex},
|
||||||
)
|
)
|
||||||
if not user_settings.is_valid():
|
if not user_settings.is_valid():
|
||||||
LOGGER.warning(user_settings.errors)
|
LOGGER.warning(user_settings.errors)
|
||||||
|
|
|
@ -60,6 +60,7 @@ class SAMLMetadataSerializer(PassiveSerializer):
|
||||||
"""SAML Provider Metadata serializer"""
|
"""SAML Provider Metadata serializer"""
|
||||||
|
|
||||||
metadata = ReadOnlyField()
|
metadata = ReadOnlyField()
|
||||||
|
download_url = ReadOnlyField(required=False)
|
||||||
|
|
||||||
|
|
||||||
class SAMLProviderImportSerializer(PassiveSerializer):
|
class SAMLProviderImportSerializer(PassiveSerializer):
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
"""SAMLSource API Views"""
|
"""SAMLSource API Views"""
|
||||||
|
from django.urls import reverse
|
||||||
from drf_spectacular.utils import extend_schema
|
from drf_spectacular.utils import extend_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
@ -46,4 +47,9 @@ class SAMLSourceViewSet(ModelViewSet):
|
||||||
"""Return metadata as XML string"""
|
"""Return metadata as XML string"""
|
||||||
source = self.get_object()
|
source = self.get_object()
|
||||||
metadata = MetadataProcessor(source, request).build_entity_descriptor()
|
metadata = MetadataProcessor(source, request).build_entity_descriptor()
|
||||||
return Response({"metadata": metadata})
|
return Response(
|
||||||
|
{
|
||||||
|
"metadata": metadata,
|
||||||
|
"download_url": reverse("authentik_sources_saml:metadata"),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
|
@ -24313,7 +24313,11 @@ components:
|
||||||
metadata:
|
metadata:
|
||||||
type: string
|
type: string
|
||||||
readOnly: true
|
readOnly: true
|
||||||
|
download_url:
|
||||||
|
type: string
|
||||||
|
readOnly: true
|
||||||
required:
|
required:
|
||||||
|
- download_url
|
||||||
- metadata
|
- metadata
|
||||||
SAMLPropertyMapping:
|
SAMLPropertyMapping:
|
||||||
type: object
|
type: object
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
export class AppURLManager {
|
export class AppURLManager {
|
||||||
|
|
||||||
static sourceSAML(slug: string, rest: string): string {
|
|
||||||
return `/source/saml/${slug}/${rest}`;
|
|
||||||
}
|
|
||||||
static sourceOAuth(slug: string, action: string): string {
|
static sourceOAuth(slug: string, action: string): string {
|
||||||
return `/source/oauth/${action}/${slug}/`;
|
return `/source/oauth/${action}/${slug}/`;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ import "../../policies/BoundPoliciesList";
|
||||||
import "./SAMLSourceForm";
|
import "./SAMLSourceForm";
|
||||||
import { SAMLSource, SourcesApi } from "authentik-api";
|
import { SAMLSource, SourcesApi } from "authentik-api";
|
||||||
import { DEFAULT_CONFIG } from "../../../api/Config";
|
import { DEFAULT_CONFIG } from "../../../api/Config";
|
||||||
import { AppURLManager } from "../../../api/legacy";
|
|
||||||
import { EVENT_REFRESH } from "../../../constants";
|
import { EVENT_REFRESH } from "../../../constants";
|
||||||
import { ifDefined } from "lit-html/directives/if-defined";
|
import { ifDefined } from "lit-html/directives/if-defined";
|
||||||
|
|
||||||
|
@ -135,19 +134,21 @@ export class SAMLSourceViewPage extends LitElement {
|
||||||
<div class="pf-u-display-flex pf-u-justify-content-center">
|
<div class="pf-u-display-flex pf-u-justify-content-center">
|
||||||
<div class="pf-u-w-75">
|
<div class="pf-u-w-75">
|
||||||
<div class="pf-c-card">
|
<div class="pf-c-card">
|
||||||
<div class="pf-c-card__body">
|
${until(new SourcesApi(DEFAULT_CONFIG).sourcesSamlMetadataRetrieve({
|
||||||
${until(new SourcesApi(DEFAULT_CONFIG).sourcesSamlMetadataRetrieve({
|
slug: this.source.slug,
|
||||||
slug: this.source.slug,
|
}).then(m => {
|
||||||
}).then(m => {
|
return html`
|
||||||
return html`<ak-codemirror mode="xml" ?readOnly=${true} value="${ifDefined(m.metadata)}"></ak-codemirror>`;
|
<div class="pf-c-card__body">
|
||||||
})
|
<ak-codemirror mode="xml" ?readOnly=${true} value="${ifDefined(m.metadata)}"></ak-codemirror>
|
||||||
)}
|
</div>
|
||||||
</div>
|
<div class="pf-c-card__footer">
|
||||||
<div class="pf-c-card__footer">
|
<a class="pf-c-button pf-m-primary" target="_blank" href=${ifDefined(m.downloadUrl)}>
|
||||||
<a class="pf-c-button pf-m-primary" target="_blank" href="${AppURLManager.sourceSAML(this.source.slug, "metadata/")}">
|
${t`Download`}
|
||||||
${t`Download`}
|
</a>
|
||||||
</a>
|
</div>
|
||||||
</div>
|
`;
|
||||||
|
})
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Reference in New Issue