Skip to content

Commit 844a50f

Browse files
connor peshekconnor peshek
authored andcommitted
authentik/providers: Add saml metadata form to wizard
1 parent 3d38bcd commit 844a50f

File tree

5 files changed

+98
-40
lines changed

5 files changed

+98
-40
lines changed

web/src/admin/applications/wizard/steps/ProviderChoices.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ export const providerTypeRenderers: Record<
3939
html`<ak-application-wizard-authentication-by-saml-configuration></ak-application-wizard-authentication-by-saml-configuration>`,
4040
order: 80,
4141
},
42+
samlproviderimportmodel: {
43+
render: () =>
44+
html`<ak-application-wizard-authentication-by-saml-metadata-configuration></ak-application-wizard-authentication-by-saml-metadata-configuration>`,
45+
order: 100,
46+
},
4247
radiusprovider: {
4348
render: () =>
4449
html`<ak-application-wizard-authentication-by-radius></ak-application-wizard-authentication-by-radius>`,

web/src/admin/applications/wizard/steps/ak-application-wizard-provider-step.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import "./providers/ak-application-wizard-provider-for-proxy.js";
44
import "./providers/ak-application-wizard-provider-for-rac.js";
55
import "./providers/ak-application-wizard-provider-for-radius.js";
66
import "./providers/ak-application-wizard-provider-for-saml.js";
7+
import "./providers/ak-application-wizard-provider-for-saml-metadata.js";
78
import "./providers/ak-application-wizard-provider-for-scim.js";
89

910
import { ApplicationWizardStep } from "../ApplicationWizardStep.js";
@@ -24,6 +25,7 @@ const providerToTag = new Map([
2425
["racprovider", "ak-application-wizard-provider-for-rac"],
2526
["radiusprovider", "ak-application-wizard-provider-for-radius"],
2627
["samlprovider", "ak-application-wizard-provider-for-saml"],
28+
["samlproviderimportmodel", "ak-application-wizard-provider-for-saml-metadata"],
2729
["scimprovider", "ak-application-wizard-provider-for-scim"],
2830
]);
2931

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import "#admin/applications/wizard/ak-wizard-title";
2+
3+
import { ApplicationWizardProviderForm } from "./ApplicationWizardProviderForm.js";
4+
5+
import { renderForm } from "#admin/providers/saml/SAMLProviderImportFormForm";
6+
7+
import type { ProvidersSamlImportMetadataCreateRequest } from "@goauthentik/api";
8+
9+
import { msg } from "@lit/localize";
10+
import { customElement } from "@lit/reactive-element/decorators.js";
11+
import { html } from "lit";
12+
13+
@customElement("ak-application-wizard-provider-for-saml-metadata")
14+
export class ApplicationWizardProviderSamlMetadataForm extends ApplicationWizardProviderForm<ProvidersSamlImportMetadataCreateRequest> {
15+
label = msg("Configure SAML Provider from Metadata");
16+
17+
renderForm() {
18+
return html`
19+
<ak-wizard-title>${this.label}</ak-wizard-title>
20+
<form id="providerform" class="pf-c-form pf-m-horizontal" slot="form">
21+
${renderForm()}
22+
</form>
23+
`;
24+
}
25+
26+
render() {
27+
if (!(this.wizard.provider && this.wizard.errors)) {
28+
throw new Error("SAML Metadata Provider Step received uninitialized wizard context.");
29+
}
30+
return this.renderForm();
31+
}
32+
}
33+
34+
declare global {
35+
interface HTMLElementTagNameMap {
36+
"ak-application-wizard-provider-for-saml-metadata": ApplicationWizardProviderSamlMetadataForm;
37+
}
38+
}

web/src/admin/providers/saml/SAMLProviderImportForm.ts

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
1-
import "#admin/common/ak-flow-search/ak-flow-search-no-default";
2-
import "#elements/forms/HorizontalFormElement";
3-
import "#elements/forms/SearchSelect/index";
1+
import { renderForm } from "./SAMLProviderImportFormForm.js";
42

53
import { DEFAULT_CONFIG } from "#common/api/config";
64
import { SentryIgnoredError } from "#common/sentry/index";
75

86
import { Form } from "#elements/forms/Form";
97

10-
import { FlowsInstancesListDesignationEnum, ProvidersApi, SAMLProvider } from "@goauthentik/api";
8+
import { ProvidersApi, SAMLProvider } from "@goauthentik/api";
119

1210
import { msg } from "@lit/localize";
13-
import { html, TemplateResult } from "lit";
1411
import { customElement } from "lit/decorators.js";
1512

1613
@customElement("ak-provider-saml-import-form")
@@ -32,41 +29,8 @@ export class SAMLProviderImportForm extends Form<SAMLProvider> {
3229
});
3330
}
3431

35-
renderForm(): TemplateResult {
36-
return html`<ak-form-element-horizontal label=${msg("Name")} required name="name">
37-
<input type="text" class="pf-c-form-control" required />
38-
</ak-form-element-horizontal>
39-
<ak-form-element-horizontal
40-
label=${msg("Authorization flow")}
41-
required
42-
name="authorizationFlow"
43-
>
44-
<ak-flow-search-no-default
45-
flowType=${FlowsInstancesListDesignationEnum.Authorization}
46-
required
47-
></ak-flow-search-no-default>
48-
<p class="pf-c-form__helper-text">
49-
${msg("Flow used when authorizing this provider.")}
50-
</p>
51-
</ak-form-element-horizontal>
52-
<ak-form-element-horizontal
53-
label=${msg("Invalidation flow")}
54-
required
55-
name="invalidationFlow"
56-
>
57-
<ak-flow-search-no-default
58-
flowType=${FlowsInstancesListDesignationEnum.Invalidation}
59-
defaultFlowSlug="default-provider-invalidation-flow"
60-
required
61-
></ak-flow-search-no-default>
62-
<p class="pf-c-form__helper-text">
63-
${msg("Flow used when logging out of this provider.")}
64-
</p>
65-
</ak-form-element-horizontal>
66-
67-
<ak-form-element-horizontal label=${msg("Metadata")} name="metadata">
68-
<input type="file" value="" class="pf-c-form-control" />
69-
</ak-form-element-horizontal>`;
32+
renderForm() {
33+
return renderForm();
7034
}
7135
}
7236

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import "#admin/common/ak-flow-search/ak-flow-search-no-default";
2+
import "#components/ak-text-input";
3+
import "#elements/forms/HorizontalFormElement";
4+
5+
import { FlowsInstancesListDesignationEnum } from "@goauthentik/api";
6+
7+
import { msg } from "@lit/localize";
8+
import { html } from "lit";
9+
10+
export function renderForm() {
11+
return html`
12+
<ak-text-input name="name" label=${msg("Name")} required></ak-text-input>
13+
14+
<ak-form-element-horizontal
15+
label=${msg("Authorization flow")}
16+
required
17+
name="authorizationFlow"
18+
>
19+
<ak-flow-search-no-default
20+
flowType=${FlowsInstancesListDesignationEnum.Authorization}
21+
required
22+
></ak-flow-search-no-default>
23+
<p class="pf-c-form__helper-text">
24+
${msg("Flow used when authorizing this provider.")}
25+
</p>
26+
</ak-form-element-horizontal>
27+
28+
<ak-form-element-horizontal
29+
label=${msg("Invalidation flow")}
30+
required
31+
name="invalidationFlow"
32+
>
33+
<ak-flow-search-no-default
34+
flowType=${FlowsInstancesListDesignationEnum.Invalidation}
35+
required
36+
></ak-flow-search-no-default>
37+
<p class="pf-c-form__helper-text">
38+
${msg("Flow used when logging out of this provider.")}
39+
</p>
40+
</ak-form-element-horizontal>
41+
42+
<ak-form-element-horizontal label=${msg("Metadata")} name="file" required>
43+
<input type="file" value="" class="pf-c-form-control" required accept=".xml" />
44+
<p class="pf-c-form__helper-text">
45+
${msg("SAML metadata XML file to import provider settings from.")}
46+
</p>
47+
</ak-form-element-horizontal>
48+
`;
49+
}

0 commit comments

Comments
 (0)