diff --git a/web/src/admin/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts b/web/src/admin/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts index 78860c82e..813f9e2be 100644 --- a/web/src/admin/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts +++ b/web/src/admin/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts @@ -1,4 +1,5 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; +import "@goauthentik/elements/SearchSelect"; import { KeyUnknown } from "@goauthentik/elements/forms/Form"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { WizardFormPage } from "@goauthentik/elements/wizard/WizardFormPage"; @@ -8,13 +9,13 @@ import { t } from "@lingui/macro"; import { customElement } from "@lit/reactive-element/decorators/custom-element.js"; import { TemplateResult, html } from "lit"; -import { ifDefined } from "lit/directives/if-defined.js"; -import { until } from "lit/directives/until.js"; import { ClientTypeEnum, + Flow, FlowsApi, FlowsInstancesListDesignationEnum, + FlowsInstancesListRequest, OAuth2ProviderRequest, ProvidersApi, } from "@goauthentik/api"; @@ -46,23 +47,29 @@ export class TypeOAuthCodeApplicationWizardPage extends WizardFormPage { ?required=${true} name="authorizationFlow" > - + => { + const args: FlowsInstancesListRequest = { + ordering: "name", + designation: FlowsInstancesListDesignationEnum.Authorization, + }; + if (query !== undefined) { + args.search = query; + } + const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); + return flows.results; + }} + .renderElement=${(flow: Flow): string => { + return flow.name; + }} + .renderDescription=${(flow: Flow): string => { + return flow.slug; + }} + .value=${(flow: Flow | undefined): string | undefined => { + return flow?.pk; + }} + > +

${t`Flow used when users access this application.`}

diff --git a/web/src/admin/providers/oauth2/OAuth2ProviderForm.ts b/web/src/admin/providers/oauth2/OAuth2ProviderForm.ts index 879be1798..107ef5b2a 100644 --- a/web/src/admin/providers/oauth2/OAuth2ProviderForm.ts +++ b/web/src/admin/providers/oauth2/OAuth2ProviderForm.ts @@ -1,5 +1,6 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { first, randomString } from "@goauthentik/common/utils"; +import "@goauthentik/elements/SearchSelect"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; @@ -15,8 +16,10 @@ import { until } from "lit/directives/until.js"; import { ClientTypeEnum, CryptoApi, + Flow, FlowsApi, FlowsInstancesListDesignationEnum, + FlowsInstancesListRequest, IssuerModeEnum, OAuth2Provider, PropertymappingsApi, @@ -77,26 +80,29 @@ export class OAuth2ProviderFormPage extends ModelForm { ?required=${true} name="authorizationFlow" > - + => { + const args: FlowsInstancesListRequest = { + ordering: "name", + designation: FlowsInstancesListDesignationEnum.Authorization, + }; + if (query !== undefined) { + args.search = query; + } + const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); + return flows.results; + }} + .renderElement=${(flow: Flow): string => { + return flow.name; + }} + .renderDescription=${(flow: Flow): string => { + return flow.slug; + }} + .value=${(flow: Flow | undefined): string | undefined => { + return flow?.pk; + }} + > +

${t`Flow used when authorizing this provider.`}

diff --git a/web/src/admin/providers/proxy/ProxyProviderForm.ts b/web/src/admin/providers/proxy/ProxyProviderForm.ts index 3b536ac78..d55de90a5 100644 --- a/web/src/admin/providers/proxy/ProxyProviderForm.ts +++ b/web/src/admin/providers/proxy/ProxyProviderForm.ts @@ -1,5 +1,6 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { first } from "@goauthentik/common/utils"; +import "@goauthentik/elements/SearchSelect"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; @@ -20,8 +21,10 @@ import PFSpacing from "@patternfly/patternfly/utilities/Spacing/spacing.css"; import { CryptoApi, + Flow, FlowsApi, FlowsInstancesListDesignationEnum, + FlowsInstancesListRequest, PropertymappingsApi, ProvidersApi, ProxyMode, @@ -292,26 +295,32 @@ export class ProxyProviderFormPage extends ModelForm { ?required=${true} name="authorizationFlow" > - + => { + const args: FlowsInstancesListRequest = { + ordering: "name", + designation: FlowsInstancesListDesignationEnum.Authorization, + }; + if (query !== undefined) { + args.search = query; + } + const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); + return flows.results; + }} + .renderElement=${(flow: Flow): string => { + return flow.name; + }} + .renderDescription=${(flow: Flow): string => { + return flow.slug; + }} + .value=${(flow: Flow | undefined): string | undefined => { + return flow?.pk; + }} + .selected=${(flow: Flow): boolean => { + return flow.pk === this.instance?.authorizationFlow; + }} + > +

${t`Flow used when authorizing this provider.`}

diff --git a/web/src/admin/providers/saml/SAMLProviderForm.ts b/web/src/admin/providers/saml/SAMLProviderForm.ts index 756b38835..c98aa0aee 100644 --- a/web/src/admin/providers/saml/SAMLProviderForm.ts +++ b/web/src/admin/providers/saml/SAMLProviderForm.ts @@ -1,4 +1,5 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; +import "@goauthentik/elements/SearchSelect"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; @@ -14,8 +15,10 @@ import { until } from "lit/directives/until.js"; import { CryptoApi, DigestAlgorithmEnum, + Flow, FlowsApi, FlowsInstancesListDesignationEnum, + FlowsInstancesListRequest, PropertymappingsApi, ProvidersApi, SAMLProvider, @@ -67,26 +70,32 @@ export class SAMLProviderFormPage extends ModelForm { ?required=${true} name="authorizationFlow" > - + => { + const args: FlowsInstancesListRequest = { + ordering: "name", + designation: FlowsInstancesListDesignationEnum.Authorization, + }; + if (query !== undefined) { + args.search = query; + } + const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); + return flows.results; + }} + .renderElement=${(flow: Flow): string => { + return flow.name; + }} + .renderDescription=${(flow: Flow): string => { + return flow.slug; + }} + .value=${(flow: Flow | undefined): string | undefined => { + return flow?.pk; + }} + .selected=${(flow: Flow): boolean => { + return flow.pk === this.instance?.authorizationFlow; + }} + > +

${t`Flow used when authorizing this provider.`}

diff --git a/web/src/admin/providers/saml/SAMLProviderImportForm.ts b/web/src/admin/providers/saml/SAMLProviderImportForm.ts index 364018d32..2d0760820 100644 --- a/web/src/admin/providers/saml/SAMLProviderImportForm.ts +++ b/web/src/admin/providers/saml/SAMLProviderImportForm.ts @@ -1,5 +1,6 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { SentryIgnoredError } from "@goauthentik/common/errors"; +import "@goauthentik/elements/SearchSelect"; import { Form } from "@goauthentik/elements/forms/Form"; import "@goauthentik/elements/forms/HorizontalFormElement"; @@ -7,11 +8,12 @@ import { t } from "@lingui/macro"; import { TemplateResult, html } from "lit"; import { customElement } from "lit/decorators.js"; -import { until } from "lit/directives/until.js"; import { + Flow, FlowsApi, FlowsInstancesListDesignationEnum, + FlowsInstancesListRequest, ProvidersApi, SAMLProvider, } from "@goauthentik/api"; @@ -45,23 +47,29 @@ export class SAMLProviderImportForm extends Form { ?required=${true} name="authorizationFlow" > - + => { + const args: FlowsInstancesListRequest = { + ordering: "name", + designation: FlowsInstancesListDesignationEnum.Authorization, + }; + if (query !== undefined) { + args.search = query; + } + const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); + return flows.results; + }} + .renderElement=${(flow: Flow): string => { + return flow.name; + }} + .renderDescription=${(flow: Flow): string => { + return flow.slug; + }} + .value=${(flow: Flow | undefined): string | undefined => { + return flow?.pk; + }} + > +

${t`Flow used when authorizing this provider.`}

diff --git a/web/src/admin/stages/invitation/InvitationForm.ts b/web/src/admin/stages/invitation/InvitationForm.ts index b8174faa2..31a4fa788 100644 --- a/web/src/admin/stages/invitation/InvitationForm.ts +++ b/web/src/admin/stages/invitation/InvitationForm.ts @@ -1,6 +1,7 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { dateTimeLocal, first } from "@goauthentik/common/utils"; import "@goauthentik/elements/CodeMirror"; +import "@goauthentik/elements/SearchSelect"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; import YAML from "yaml"; @@ -9,12 +10,12 @@ import { t } from "@lingui/macro"; import { TemplateResult, html } from "lit"; import { customElement } from "lit/decorators.js"; -import { ifDefined } from "lit/directives/if-defined.js"; -import { until } from "lit/directives/until.js"; import { + Flow, FlowsApi, FlowsInstancesListDesignationEnum, + FlowsInstancesListRequest, Invitation, StagesApi, } from "@goauthentik/api"; @@ -74,29 +75,33 @@ export class InvitationForm extends ModelForm { /> - + => { + const args: FlowsInstancesListRequest = { + ordering: "name", + designation: FlowsInstancesListDesignationEnum.Enrollment, + }; + if (query !== undefined) { + args.search = query; + } + const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); + return flows.results; + }} + .renderElement=${(flow: Flow): string => { + return flow.name; + }} + .renderDescription=${(flow: Flow): string => { + return flow.slug; + }} + .value=${(flow: Flow | undefined): string | undefined => { + return flow?.pk; + }} + .selected=${(flow: Flow): boolean => { + return flow.pk === this.instance?.flow; + }} + ?blankable=${true} + > +

${t`When selected, the invite will only be usable with the flow. By default the invite is accepted on all flows with invitation stages.`}