web/admin: add Radio control, search-select fixes (#4333)
* move search select to forms folder Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * add radio, migrate smaller lists Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * move dropdown when scrolling, hide when container out of frame Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		| @ -1,8 +1,8 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { PFColor } from "@goauthentik/elements/Label"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import { Form } from "@goauthentik/elements/forms/Form"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,12 +1,13 @@ | ||||
| import "@goauthentik/admin/providers/ProviderWizard"; | ||||
| import { DEFAULT_CONFIG, config } from "@goauthentik/common/api/config"; | ||||
| import { first, groupBy } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import "@goauthentik/elements/forms/ModalForm"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/ProxyForm"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -153,20 +154,23 @@ export class ApplicationForm extends ModelForm<Application, string> { | ||||
|                 ?required=${true} | ||||
|                 name="policyEngineMode" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value=${PolicyEngineMode.Any} | ||||
|                         ?selected=${this.instance?.policyEngineMode === PolicyEngineMode.Any} | ||||
|                     > | ||||
|                         ${t`ANY, any policy must match to grant access.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${PolicyEngineMode.All} | ||||
|                         ?selected=${this.instance?.policyEngineMode === PolicyEngineMode.All} | ||||
|                     > | ||||
|                         ${t`ALL, all policies must match to grant access.`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: "ANY", | ||||
|                             value: PolicyEngineMode.Any, | ||||
|                             default: true, | ||||
|                             description: html`${t`Any policy must match to grant access`}`, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: "ALL", | ||||
|                             value: PolicyEngineMode.All, | ||||
|                             description: html`${t`All policies must match to grant access`}`, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.policyEngineMode} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-group .expanded=${true}> | ||||
|                 <span slot="header"> ${t`UI settings`} </span> | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| 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 "@goauthentik/elements/forms/SearchSelect"; | ||||
| import { WizardFormPage } from "@goauthentik/elements/wizard/WizardFormPage"; | ||||
| import "@goauthentik/elements/wizard/WizardFormPage"; | ||||
|  | ||||
|  | ||||
| @ -2,10 +2,10 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { docLink } from "@goauthentik/common/global"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import YAML from "yaml"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -1,7 +1,8 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -48,29 +49,6 @@ export class RuleForm extends ModelForm<NotificationRule, string> { | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     renderSeverity(): TemplateResult { | ||||
|         return html` | ||||
|             <option | ||||
|                 value=${SeverityEnum.Alert} | ||||
|                 ?selected=${this.instance?.severity === SeverityEnum.Alert} | ||||
|             > | ||||
|                 ${t`Alert`} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${SeverityEnum.Warning} | ||||
|                 ?selected=${this.instance?.severity === SeverityEnum.Warning} | ||||
|             > | ||||
|                 ${t`Warning`} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${SeverityEnum.Notice} | ||||
|                 ?selected=${this.instance?.severity === SeverityEnum.Notice} | ||||
|             > | ||||
|                 ${t`Notice`} | ||||
|             </option> | ||||
|         `; | ||||
|     } | ||||
|  | ||||
|     renderForm(): TemplateResult { | ||||
|         return html`<form class="pf-c-form pf-m-horizontal"> | ||||
|             <ak-form-element-horizontal label=${t`Name`} ?required=${true} name="name"> | ||||
| @ -107,10 +85,12 @@ export class RuleForm extends ModelForm<NotificationRule, string> { | ||||
|                 </ak-search-select> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Transports`} ?required=${true} name="transports"> | ||||
|                 <select name="users" class="pf-c-form-control" multiple> | ||||
|                 <select class="pf-c-form-control" multiple> | ||||
|                     ${until( | ||||
|                         new EventsApi(DEFAULT_CONFIG) | ||||
|                             .eventsTransportsList({}) | ||||
|                             .eventsTransportsList({ | ||||
|                                 ordering: "name", | ||||
|                             }) | ||||
|                             .then((transports) => { | ||||
|                                 return transports.results.map((transport) => { | ||||
|                                     const selected = Array.from( | ||||
| @ -137,9 +117,25 @@ export class RuleForm extends ModelForm<NotificationRule, string> { | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Severity`} ?required=${true} name="severity"> | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${this.renderSeverity()} | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: "Alert", | ||||
|                             value: SeverityEnum.Alert, | ||||
|                             default: true, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: t`Warning`, | ||||
|                             value: SeverityEnum.Warning, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: t`Notice`, | ||||
|                             value: SeverityEnum.Notice, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.severity} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|             </ak-form-element-horizontal> | ||||
|         </form>`; | ||||
|     } | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -2,8 +2,10 @@ import { DesignationToLabel, LayoutToLabel } from "@goauthentik/admin/flows/util | ||||
| import { AuthenticationEnum } from "@goauthentik/api/dist/models/AuthenticationEnum"; | ||||
| import { DEFAULT_CONFIG, config } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -74,140 +76,6 @@ export class FlowForm extends ModelForm<Flow, string> { | ||||
|         return flow; | ||||
|     }; | ||||
|  | ||||
|     renderDesignations(): TemplateResult { | ||||
|         return html` | ||||
|             <option | ||||
|                 value=${FlowDesignationEnum.Authentication} | ||||
|                 ?selected=${this.instance?.designation === FlowDesignationEnum.Authentication} | ||||
|             > | ||||
|                 ${DesignationToLabel(FlowDesignationEnum.Authentication)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${FlowDesignationEnum.Authorization} | ||||
|                 ?selected=${this.instance?.designation === FlowDesignationEnum.Authorization} | ||||
|             > | ||||
|                 ${DesignationToLabel(FlowDesignationEnum.Authorization)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${FlowDesignationEnum.Enrollment} | ||||
|                 ?selected=${this.instance?.designation === FlowDesignationEnum.Enrollment} | ||||
|             > | ||||
|                 ${DesignationToLabel(FlowDesignationEnum.Enrollment)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${FlowDesignationEnum.Invalidation} | ||||
|                 ?selected=${this.instance?.designation === FlowDesignationEnum.Invalidation} | ||||
|             > | ||||
|                 ${DesignationToLabel(FlowDesignationEnum.Invalidation)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${FlowDesignationEnum.Recovery} | ||||
|                 ?selected=${this.instance?.designation === FlowDesignationEnum.Recovery} | ||||
|             > | ||||
|                 ${DesignationToLabel(FlowDesignationEnum.Recovery)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${FlowDesignationEnum.StageConfiguration} | ||||
|                 ?selected=${this.instance?.designation === FlowDesignationEnum.StageConfiguration} | ||||
|             > | ||||
|                 ${DesignationToLabel(FlowDesignationEnum.StageConfiguration)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${FlowDesignationEnum.Unenrollment} | ||||
|                 ?selected=${this.instance?.designation === FlowDesignationEnum.Unenrollment} | ||||
|             > | ||||
|                 ${DesignationToLabel(FlowDesignationEnum.Unenrollment)} | ||||
|             </option> | ||||
|         `; | ||||
|     } | ||||
|  | ||||
|     renderDeniedAction(): TemplateResult { | ||||
|         return html` <option | ||||
|                 value=${DeniedActionEnum.MessageContinue} | ||||
|                 ?selected=${this.instance?.deniedAction === DeniedActionEnum.MessageContinue} | ||||
|             > | ||||
|                 ${t`MESSAGE_CONTINUE will follow the ?next parameter if set, otherwise show a message.`} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${DeniedActionEnum.Continue} | ||||
|                 ?selected=${this.instance?.deniedAction === DeniedActionEnum.Continue} | ||||
|             > | ||||
|                 ${t`CONTINUE will either follow the ?next parameter or redirect to the default interface.`} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${DeniedActionEnum.Message} | ||||
|                 ?selected=${this.instance?.deniedAction === DeniedActionEnum.Message} | ||||
|             > | ||||
|                 ${t`MESSAGE will notify the user the flow isn't applicable.`} | ||||
|             </option>`; | ||||
|     } | ||||
|  | ||||
|     renderAuthentication(): TemplateResult { | ||||
|         return html` | ||||
|             <option | ||||
|                 value=${AuthenticationEnum.None} | ||||
|                 ?selected=${this.instance?.authentication === AuthenticationEnum.None} | ||||
|             > | ||||
|                 ${t`No requirement`} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${AuthenticationEnum.RequireAuthenticated} | ||||
|                 ?selected=${this.instance?.authentication === | ||||
|                 AuthenticationEnum.RequireAuthenticated} | ||||
|             > | ||||
|                 ${t`Require authentication`} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${AuthenticationEnum.RequireUnauthenticated} | ||||
|                 ?selected=${this.instance?.authentication === | ||||
|                 AuthenticationEnum.RequireUnauthenticated} | ||||
|             > | ||||
|                 ${t`Require no authentication.`} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${AuthenticationEnum.RequireSuperuser} | ||||
|                 ?selected=${this.instance?.authentication === AuthenticationEnum.RequireSuperuser} | ||||
|             > | ||||
|                 ${t`Require superuser.`} | ||||
|             </option> | ||||
|         `; | ||||
|     } | ||||
|  | ||||
|     renderLayout(): TemplateResult { | ||||
|         return html` | ||||
|             <option | ||||
|                 value=${LayoutEnum.Stacked} | ||||
|                 ?selected=${this.instance?.layout === LayoutEnum.Stacked} | ||||
|             > | ||||
|                 ${LayoutToLabel(LayoutEnum.Stacked)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${LayoutEnum.ContentLeft} | ||||
|                 ?selected=${this.instance?.layout === LayoutEnum.ContentLeft} | ||||
|             > | ||||
|                 ${LayoutToLabel(LayoutEnum.ContentLeft)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${LayoutEnum.ContentRight} | ||||
|                 ?selected=${this.instance?.layout === LayoutEnum.ContentRight} | ||||
|             > | ||||
|                 ${LayoutToLabel(LayoutEnum.ContentRight)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${LayoutEnum.SidebarLeft} | ||||
|                 ?selected=${this.instance?.layout === LayoutEnum.SidebarLeft} | ||||
|             > | ||||
|                 ${LayoutToLabel(LayoutEnum.SidebarLeft)} | ||||
|             </option> | ||||
|             <option | ||||
|                 value=${LayoutEnum.SidebarRight} | ||||
|                 ?selected=${this.instance?.layout === LayoutEnum.SidebarRight} | ||||
|             > | ||||
|                 ${LayoutToLabel(LayoutEnum.SidebarRight)} | ||||
|             </option> | ||||
|         `; | ||||
|     } | ||||
|  | ||||
|     renderForm(): TemplateResult { | ||||
|         return html`<form class="pf-c-form pf-m-horizontal"> | ||||
|             <ak-form-element-horizontal label=${t`Name`} ?required=${true} name="name"> | ||||
| @ -236,38 +104,6 @@ export class FlowForm extends ModelForm<Flow, string> { | ||||
|                 /> | ||||
|                 <p class="pf-c-form__helper-text">${t`Visible in the URL.`}</p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal | ||||
|                 label=${t`Policy engine mode`} | ||||
|                 ?required=${true} | ||||
|                 name="policyEngineMode" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value=${PolicyEngineMode.Any} | ||||
|                         ?selected=${this.instance?.policyEngineMode === PolicyEngineMode.Any} | ||||
|                     > | ||||
|                         ${t`ANY, any policy must match to grant access.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${PolicyEngineMode.All} | ||||
|                         ?selected=${this.instance?.policyEngineMode === PolicyEngineMode.All} | ||||
|                     > | ||||
|                         ${t`ALL, all policies must match to grant access.`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal | ||||
|                 label=${t`Authentication`} | ||||
|                 ?required=${true} | ||||
|                 name="authentication" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${this.renderAuthentication()} | ||||
|                 </select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Required authentication level for this flow.`} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal | ||||
|                 label=${t`Designation`} | ||||
|                 ?required=${true} | ||||
| @ -277,99 +113,264 @@ export class FlowForm extends ModelForm<Flow, string> { | ||||
|                     <option value="" ?selected=${this.instance?.designation === undefined}> | ||||
|                         --------- | ||||
|                     </option> | ||||
|                     ${this.renderDesignations()} | ||||
|                     <option | ||||
|                         value=${FlowDesignationEnum.Authentication} | ||||
|                         ?selected=${this.instance?.designation === | ||||
|                         FlowDesignationEnum.Authentication} | ||||
|                     > | ||||
|                         ${DesignationToLabel(FlowDesignationEnum.Authentication)} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${FlowDesignationEnum.Authorization} | ||||
|                         ?selected=${this.instance?.designation === | ||||
|                         FlowDesignationEnum.Authorization} | ||||
|                     > | ||||
|                         ${DesignationToLabel(FlowDesignationEnum.Authorization)} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${FlowDesignationEnum.Enrollment} | ||||
|                         ?selected=${this.instance?.designation === FlowDesignationEnum.Enrollment} | ||||
|                     > | ||||
|                         ${DesignationToLabel(FlowDesignationEnum.Enrollment)} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${FlowDesignationEnum.Invalidation} | ||||
|                         ?selected=${this.instance?.designation === FlowDesignationEnum.Invalidation} | ||||
|                     > | ||||
|                         ${DesignationToLabel(FlowDesignationEnum.Invalidation)} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${FlowDesignationEnum.Recovery} | ||||
|                         ?selected=${this.instance?.designation === FlowDesignationEnum.Recovery} | ||||
|                     > | ||||
|                         ${DesignationToLabel(FlowDesignationEnum.Recovery)} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${FlowDesignationEnum.StageConfiguration} | ||||
|                         ?selected=${this.instance?.designation === | ||||
|                         FlowDesignationEnum.StageConfiguration} | ||||
|                     > | ||||
|                         ${DesignationToLabel(FlowDesignationEnum.StageConfiguration)} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${FlowDesignationEnum.Unenrollment} | ||||
|                         ?selected=${this.instance?.designation === FlowDesignationEnum.Unenrollment} | ||||
|                     > | ||||
|                         ${DesignationToLabel(FlowDesignationEnum.Unenrollment)} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Decides what this Flow is used for. For example, the Authentication flow is redirect to when an un-authenticated user visits authentik.`} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal | ||||
|                 label=${t`Denied action`} | ||||
|                 label=${t`Authentication`} | ||||
|                 ?required=${true} | ||||
|                 name="deniedAction" | ||||
|                 name="authentication" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${this.renderDeniedAction()} | ||||
|                     <option | ||||
|                         value=${AuthenticationEnum.None} | ||||
|                         ?selected=${this.instance?.authentication === AuthenticationEnum.None} | ||||
|                     > | ||||
|                         ${t`No requirement`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${AuthenticationEnum.RequireAuthenticated} | ||||
|                         ?selected=${this.instance?.authentication === | ||||
|                         AuthenticationEnum.RequireAuthenticated} | ||||
|                     > | ||||
|                         ${t`Require authentication`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${AuthenticationEnum.RequireUnauthenticated} | ||||
|                         ?selected=${this.instance?.authentication === | ||||
|                         AuthenticationEnum.RequireUnauthenticated} | ||||
|                     > | ||||
|                         ${t`Require no authentication.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${AuthenticationEnum.RequireSuperuser} | ||||
|                         ?selected=${this.instance?.authentication === | ||||
|                         AuthenticationEnum.RequireSuperuser} | ||||
|                     > | ||||
|                         ${t`Require superuser.`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Decides the response when a policy denies access to this flow for a user.`} | ||||
|                     ${t`Required authentication level for this flow.`} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Layout`} ?required=${true} name="layout"> | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${this.renderLayout()} | ||||
|                 </select> | ||||
|             </ak-form-element-horizontal> | ||||
|             ${until( | ||||
|                 config().then((c) => { | ||||
|                     if (c.capabilities.includes(CapabilitiesEnum.SaveMedia)) { | ||||
|                         return html`<ak-form-element-horizontal | ||||
|             <ak-form-group> | ||||
|                 <span slot="header"> ${t`Behavior settings`} </span> | ||||
|                 <div slot="body" class="pf-c-form"> | ||||
|                     <ak-form-element-horizontal name="compatibilityMode"> | ||||
|                         <div class="pf-c-check"> | ||||
|                             <input | ||||
|                                 type="checkbox" | ||||
|                                 class="pf-c-check__input" | ||||
|                                 ?checked=${first(this.instance?.compatibilityMode, false)} | ||||
|                             /> | ||||
|                             <label class="pf-c-check__label"> ${t`Compatibility mode`} </label> | ||||
|                         </div> | ||||
|                         <p class="pf-c-form__helper-text"> | ||||
|                             ${t`Increases compatibility with password managers and mobile devices.`} | ||||
|                         </p> | ||||
|                     </ak-form-element-horizontal> | ||||
|                     <ak-form-element-horizontal | ||||
|                         label=${t`Denied action`} | ||||
|                         ?required=${true} | ||||
|                         name="deniedAction" | ||||
|                     > | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: "MESSAGE_CONTINUE", | ||||
|                                     value: DeniedActionEnum.MessageContinue, | ||||
|                                     default: true, | ||||
|                                     description: html`${t`Will follow the ?next parameter if set, otherwise show a message`}`, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "CONTINUE", | ||||
|                                     value: DeniedActionEnum.Continue, | ||||
|                                     description: html`${t`Will either follow the ?next parameter or redirect to the default interface`}`, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "MESSAGE", | ||||
|                                     value: DeniedActionEnum.Message, | ||||
|                                     description: html`${t`Will notify the user the flow isn't applicable`}`, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.deniedAction} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                         <p class="pf-c-form__helper-text"> | ||||
|                             ${t`Decides the response when a policy denies access to this flow for a user.`} | ||||
|                         </p> | ||||
|                     </ak-form-element-horizontal> | ||||
|                     <ak-form-element-horizontal | ||||
|                         label=${t`Policy engine mode`} | ||||
|                         ?required=${true} | ||||
|                         name="policyEngineMode" | ||||
|                     > | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: "ANY", | ||||
|                                     value: PolicyEngineMode.Any, | ||||
|                                     default: true, | ||||
|                                     description: html`${t`Any policy must match to grant access`}`, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "ALL", | ||||
|                                     value: PolicyEngineMode.All, | ||||
|                                     description: html`${t`All policies must match to grant access`}`, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.policyEngineMode} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                     </ak-form-element-horizontal> | ||||
|                 </div> | ||||
|             </ak-form-group> | ||||
|             <ak-form-group> | ||||
|                 <span slot="header"> ${t`Appearance settings`} </span> | ||||
|                 <div slot="body" class="pf-c-form"> | ||||
|                     <ak-form-element-horizontal label=${t`Layout`} ?required=${true} name="layout"> | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value=${LayoutEnum.Stacked} | ||||
|                                 ?selected=${this.instance?.layout === LayoutEnum.Stacked} | ||||
|                             > | ||||
|                                 ${LayoutToLabel(LayoutEnum.Stacked)} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${LayoutEnum.ContentLeft} | ||||
|                                 ?selected=${this.instance?.layout === LayoutEnum.ContentLeft} | ||||
|                             > | ||||
|                                 ${LayoutToLabel(LayoutEnum.ContentLeft)} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${LayoutEnum.ContentRight} | ||||
|                                 ?selected=${this.instance?.layout === LayoutEnum.ContentRight} | ||||
|                             > | ||||
|                                 ${LayoutToLabel(LayoutEnum.ContentRight)} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${LayoutEnum.SidebarLeft} | ||||
|                                 ?selected=${this.instance?.layout === LayoutEnum.SidebarLeft} | ||||
|                             > | ||||
|                                 ${LayoutToLabel(LayoutEnum.SidebarLeft)} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${LayoutEnum.SidebarRight} | ||||
|                                 ?selected=${this.instance?.layout === LayoutEnum.SidebarRight} | ||||
|                             > | ||||
|                                 ${LayoutToLabel(LayoutEnum.SidebarRight)} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                     </ak-form-element-horizontal> | ||||
|                     ${until( | ||||
|                         config().then((c) => { | ||||
|                             if (c.capabilities.includes(CapabilitiesEnum.SaveMedia)) { | ||||
|                                 return html`<ak-form-element-horizontal | ||||
|                                         label=${t`Background`} | ||||
|                                         name="background" | ||||
|                                     > | ||||
|                                         <input type="file" value="" class="pf-c-form-control" /> | ||||
|                                         ${this.instance?.background | ||||
|                                             ? html` | ||||
|                                                   <p class="pf-c-form__helper-text"> | ||||
|                                                       ${t`Currently set to:`} | ||||
|                                                       ${this.instance?.background} | ||||
|                                                   </p> | ||||
|                                               ` | ||||
|                                             : html``} | ||||
|                                         <p class="pf-c-form__helper-text"> | ||||
|                                             ${t`Background shown during execution.`} | ||||
|                                         </p> | ||||
|                                     </ak-form-element-horizontal> | ||||
|                                     ${this.instance?.background | ||||
|                                         ? html` | ||||
|                                               <ak-form-element-horizontal> | ||||
|                                                   <div class="pf-c-check"> | ||||
|                                                       <input | ||||
|                                                           type="checkbox" | ||||
|                                                           class="pf-c-check__input" | ||||
|                                                           @change=${(ev: Event) => { | ||||
|                                                               const target = | ||||
|                                                                   ev.target as HTMLInputElement; | ||||
|                                                               this.clearBackground = target.checked; | ||||
|                                                           }} | ||||
|                                                       /> | ||||
|                                                       <label class="pf-c-check__label"> | ||||
|                                                           ${t`Clear background image`} | ||||
|                                                       </label> | ||||
|                                                   </div> | ||||
|                                                   <p class="pf-c-form__helper-text"> | ||||
|                                                       ${t`Delete currently set background image.`} | ||||
|                                                   </p> | ||||
|                                               </ak-form-element-horizontal> | ||||
|                                           ` | ||||
|                                         : html``}`; | ||||
|                             } | ||||
|                             return html`<ak-form-element-horizontal | ||||
|                                 label=${t`Background`} | ||||
|                                 name="background" | ||||
|                             > | ||||
|                                 <input type="file" value="" class="pf-c-form-control" /> | ||||
|                                 ${this.instance?.background | ||||
|                                     ? html` | ||||
|                                           <p class="pf-c-form__helper-text"> | ||||
|                                               ${t`Currently set to:`} ${this.instance?.background} | ||||
|                                           </p> | ||||
|                                       ` | ||||
|                                     : html``} | ||||
|                                 <input | ||||
|                                     type="text" | ||||
|                                     value="${first(this.instance?.background, "")}" | ||||
|                                     class="pf-c-form-control" | ||||
|                                 /> | ||||
|                                 <p class="pf-c-form__helper-text"> | ||||
|                                     ${t`Background shown during execution.`} | ||||
|                                 </p> | ||||
|                             </ak-form-element-horizontal> | ||||
|                             ${this.instance?.background | ||||
|                                 ? html` | ||||
|                                       <ak-form-element-horizontal> | ||||
|                                           <div class="pf-c-check"> | ||||
|                                               <input | ||||
|                                                   type="checkbox" | ||||
|                                                   class="pf-c-check__input" | ||||
|                                                   @change=${(ev: Event) => { | ||||
|                                                       const target = ev.target as HTMLInputElement; | ||||
|                                                       this.clearBackground = target.checked; | ||||
|                                                   }} | ||||
|                                               /> | ||||
|                                               <label class="pf-c-check__label"> | ||||
|                                                   ${t`Clear background image`} | ||||
|                                               </label> | ||||
|                                           </div> | ||||
|                                           <p class="pf-c-form__helper-text"> | ||||
|                                               ${t`Delete currently set background image.`} | ||||
|                                           </p> | ||||
|                                       </ak-form-element-horizontal> | ||||
|                                   ` | ||||
|                                 : html``}`; | ||||
|                     } | ||||
|                     return html`<ak-form-element-horizontal | ||||
|                         label=${t`Background`} | ||||
|                         name="background" | ||||
|                     > | ||||
|                         <input | ||||
|                             type="text" | ||||
|                             value="${first(this.instance?.background, "")}" | ||||
|                             class="pf-c-form-control" | ||||
|                         /> | ||||
|                         <p class="pf-c-form__helper-text"> | ||||
|                             ${t`Background shown during execution.`} | ||||
|                         </p> | ||||
|                     </ak-form-element-horizontal>`; | ||||
|                 }), | ||||
|             )} | ||||
|             <ak-form-element-horizontal name="compatibilityMode"> | ||||
|                 <div class="pf-c-check"> | ||||
|                     <input | ||||
|                         type="checkbox" | ||||
|                         class="pf-c-check__input" | ||||
|                         ?checked=${first(this.instance?.compatibilityMode, false)} | ||||
|                     /> | ||||
|                     <label class="pf-c-check__label"> ${t`Compatibility mode`} </label> | ||||
|                             </ak-form-element-horizontal>`; | ||||
|                         }), | ||||
|                     )} | ||||
|                 </div> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Enable compatibility mode, increases compatibility with password managers on mobile devices.`} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             </ak-form-group> | ||||
|         </form>`; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,8 +1,9 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first, groupBy } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -165,35 +166,34 @@ export class StageBindingForm extends ModelForm<FlowStageBinding, string> { | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal | ||||
|                 label=${t`Invalid response action`} | ||||
|                 label=${t`Invalid response behavior`} | ||||
|                 ?required=${true} | ||||
|                 name="invalidResponseAction" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value=${InvalidResponseActionEnum.Retry} | ||||
|                         ?selected=${this.instance?.invalidResponseAction === | ||||
|                         InvalidResponseActionEnum.Retry} | ||||
|                     > | ||||
|                         ${t`RETRY returns the error message and a similar challenge to the executor.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${InvalidResponseActionEnum.Restart} | ||||
|                         ?selected=${this.instance?.invalidResponseAction === | ||||
|                         InvalidResponseActionEnum.Restart} | ||||
|                     > | ||||
|                         ${t`RESTART restarts the flow from the beginning.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${InvalidResponseActionEnum.RestartWithContext} | ||||
|                         ?selected=${this.instance?.invalidResponseAction === | ||||
|                         InvalidResponseActionEnum.RestartWithContext} | ||||
|                     > | ||||
|                         ${t`RESTART_WITH_CONTEXT restarts the flow from the beginning, while keeping the flow context.`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: "RETRY", | ||||
|                             value: InvalidResponseActionEnum.Retry, | ||||
|                             default: true, | ||||
|                             description: html`${t`Returns the error message and a similar challenge to the executor`}`, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: "RESTART", | ||||
|                             value: InvalidResponseActionEnum.Restart, | ||||
|                             description: html`${t`Restarts the flow from the beginning`}`, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: "RESTART_WITH_CONTEXT", | ||||
|                             value: InvalidResponseActionEnum.RestartWithContext, | ||||
|                             description: html`${t`Restarts the flow from the beginning, while keeping the flow context`}`, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.invalidResponseAction} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Configure how the flow executor should handle an invalid response to a challenge.`} | ||||
|                     ${t`Configure how the flow executor should handle an invalid response to a challenge given by this bound stage.`} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal | ||||
| @ -201,20 +201,23 @@ export class StageBindingForm extends ModelForm<FlowStageBinding, string> { | ||||
|                 ?required=${true} | ||||
|                 name="policyEngineMode" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value=${PolicyEngineMode.Any} | ||||
|                         ?selected=${this.instance?.policyEngineMode === PolicyEngineMode.Any} | ||||
|                     > | ||||
|                         ${t`ANY, any policy must match to include this stage access.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${PolicyEngineMode.All} | ||||
|                         ?selected=${this.instance?.policyEngineMode === PolicyEngineMode.All} | ||||
|                     > | ||||
|                         ${t`ALL, all policies must match to include this stage access.`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: "ANY", | ||||
|                             value: PolicyEngineMode.Any, | ||||
|                             default: true, | ||||
|                             description: html`${t`Any policy must match to grant access`}`, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: "ALL", | ||||
|                             value: PolicyEngineMode.All, | ||||
|                             description: html`${t`All policies must match to grant access`}`, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.policyEngineMode} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|             </ak-form-element-horizontal> | ||||
|         </form>`; | ||||
|     } | ||||
|  | ||||
| @ -2,11 +2,11 @@ import "@goauthentik/admin/groups/MemberSelectModal"; | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/chips/Chip"; | ||||
| import "@goauthentik/elements/chips/ChipGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import { UserOption } from "@goauthentik/elements/user/utils"; | ||||
| import YAML from "yaml"; | ||||
|  | ||||
|  | ||||
| @ -2,9 +2,9 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { docLink } from "@goauthentik/common/global"; | ||||
| import { groupBy } 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 "@goauthentik/elements/forms/SearchSelect"; | ||||
| import YAML from "yaml"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first, groupBy } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -2,9 +2,9 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import { PFColor } from "@goauthentik/elements/Label"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import { Form } from "@goauthentik/elements/forms/Form"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import YAML from "yaml"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import { Form } from "@goauthentik/elements/forms/Form"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import YAML from "yaml"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -1,9 +1,10 @@ | ||||
| import { DEFAULT_CONFIG, tenant } 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"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -146,44 +147,49 @@ export class LDAPProviderFormPage extends ModelForm<LDAPProvider, number> { | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Bind mode`} name="bindMode"> | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value="${LDAPAPIAccessMode.Cached}" | ||||
|                         ?selected=${this.instance?.bindMode === LDAPAPIAccessMode.Cached} | ||||
|                     > | ||||
|                         ${t`Cached binding, flow is executed and session is cached in memory. Flow is executed when session expires.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value="${LDAPAPIAccessMode.Direct}" | ||||
|                         ?selected=${this.instance?.bindMode === LDAPAPIAccessMode.Direct} | ||||
|                     > | ||||
|                         ${t`Direct binding, always execute the configured bind flow to authenticate the user.`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: t`Cached binding`, | ||||
|                             value: LDAPAPIAccessMode.Cached, | ||||
|                             default: true, | ||||
|                             description: html`${t`Flow is executed and session is cached in memory. Flow is executed when session expires`}`, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: t`Direct binding`, | ||||
|                             value: LDAPAPIAccessMode.Direct, | ||||
|                             description: html`${t`Always execute the configured bind flow to authenticate the user`}`, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.bindMode} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Configure how the outpost authenticates requests.`} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Search mode`} name="searchMode"> | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value="${LDAPAPIAccessMode.Cached}" | ||||
|                         ?selected=${this.instance?.searchMode === LDAPAPIAccessMode.Cached} | ||||
|                     > | ||||
|                         ${t`Cached querying, the outpost holds all users and groups in-memory and will refresh every 5 Minutes.`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value="${LDAPAPIAccessMode.Direct}" | ||||
|                         ?selected=${this.instance?.searchMode === LDAPAPIAccessMode.Direct} | ||||
|                     > | ||||
|                         ${t`Direct querying, always returns the latest data, but slower than cached querying.`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: t`Cached querying`, | ||||
|                             value: LDAPAPIAccessMode.Cached, | ||||
|                             default: true, | ||||
|                             description: html`${t`The outpost holds all users and groups in-memory and will refresh every 5 Minutes`}`, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: t`Direct querying`, | ||||
|                             value: LDAPAPIAccessMode.Direct, | ||||
|                             description: html`${t`Always returns the latest data, but slower than cached querying`}`, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.searchMode} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Configure how the outpost queries the core authentik server's users.`} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|  | ||||
|             <ak-form-group .expanded=${true}> | ||||
|                 <span slot="header"> ${t`Protocol settings`} </span> | ||||
|                 <div slot="body" class="pf-c-form"> | ||||
|  | ||||
| @ -1,9 +1,10 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import "@goauthentik/elements/utils/TimeDeltaHelp"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
| @ -365,21 +366,21 @@ ${this.instance?.redirectUris}</textarea | ||||
|                         ?required=${true} | ||||
|                         name="issuerMode" | ||||
|                     > | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value="${IssuerModeEnum.PerProvider}" | ||||
|                                 ?selected=${this.instance?.issuerMode === | ||||
|                                 IssuerModeEnum.PerProvider} | ||||
|                             > | ||||
|                                 ${t`Each provider has a different issuer, based on the application slug.`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value="${IssuerModeEnum.Global}" | ||||
|                                 ?selected=${this.instance?.issuerMode === IssuerModeEnum.Global} | ||||
|                             > | ||||
|                                 ${t`Same identifier is used for all providers`} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: t`Each provider has a different issuer, based on the application slug`, | ||||
|                                     value: IssuerModeEnum.PerProvider, | ||||
|                                     default: true, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: t`Same identifier is used for all providers`, | ||||
|                                     value: IssuerModeEnum.Global, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.issuerMode} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                         <p class="pf-c-form__helper-text"> | ||||
|                             ${t`Configure how the issuer field of the ID Token should be filled.`} | ||||
|                         </p> | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import "@goauthentik/elements/utils/TimeDeltaHelp"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -1,8 +1,9 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import "@goauthentik/elements/utils/TimeDeltaHelp"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
| @ -130,20 +131,21 @@ export class SAMLProviderFormPage extends ModelForm<SAMLProvider, number> { | ||||
|                         ?required=${true} | ||||
|                         name="spBinding" | ||||
|                     > | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value=${SpBindingEnum.Redirect} | ||||
|                                 ?selected=${this.instance?.spBinding === SpBindingEnum.Redirect} | ||||
|                             > | ||||
|                                 ${t`Redirect`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SpBindingEnum.Post} | ||||
|                                 ?selected=${this.instance?.spBinding === SpBindingEnum.Post} | ||||
|                             > | ||||
|                                 ${t`Post`} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: t`Redirect`, | ||||
|                                     value: SpBindingEnum.Redirect, | ||||
|                                     default: true, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: t`Post`, | ||||
|                                     value: SpBindingEnum.Post, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.spBinding} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                         <p class="pf-c-form__helper-text"> | ||||
|                             ${t`Determines how authentik sends the response back to the Service Provider.`} | ||||
|                         </p> | ||||
| @ -366,81 +368,62 @@ export class SAMLProviderFormPage extends ModelForm<SAMLProvider, number> { | ||||
|                         ?required=${true} | ||||
|                         name="digestAlgorithm" | ||||
|                     > | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200009Xmldsigsha1} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                 DigestAlgorithmEnum._200009Xmldsigsha1} | ||||
|                             > | ||||
|                                 ${t`SHA1`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200104Xmlencsha256} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                     DigestAlgorithmEnum._200104Xmlencsha256 || | ||||
|                                 this.instance?.digestAlgorithm === undefined} | ||||
|                             > | ||||
|                                 ${t`SHA256`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200104XmldsigMoresha384} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                 DigestAlgorithmEnum._200104XmldsigMoresha384} | ||||
|                             > | ||||
|                                 ${t`SHA384`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200104Xmlencsha512} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                 DigestAlgorithmEnum._200104Xmlencsha512} | ||||
|                             > | ||||
|                                 ${t`SHA512`} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: "SHA1", | ||||
|                                     value: DigestAlgorithmEnum._200009Xmldsigsha1, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "SHA256", | ||||
|                                     value: DigestAlgorithmEnum._200104Xmlencsha256, | ||||
|                                     default: true, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "SHA384", | ||||
|                                     value: DigestAlgorithmEnum._200104XmldsigMoresha384, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "SHA512", | ||||
|                                     value: DigestAlgorithmEnum._200104Xmlencsha512, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.digestAlgorithm} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                     </ak-form-element-horizontal> | ||||
|                     <ak-form-element-horizontal | ||||
|                         label=${t`Signature algorithm`} | ||||
|                         ?required=${true} | ||||
|                         name="signatureAlgorithm" | ||||
|                     > | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200009XmldsigrsaSha1} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200009XmldsigrsaSha1} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA1`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200104XmldsigMorersaSha256} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                     SignatureAlgorithmEnum._200104XmldsigMorersaSha256 || | ||||
|                                 this.instance?.signatureAlgorithm === undefined} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA256`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200104XmldsigMorersaSha384} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200104XmldsigMorersaSha384} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA384`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200104XmldsigMorersaSha512} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200104XmldsigMorersaSha512} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA512`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200009XmldsigdsaSha1} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200009XmldsigdsaSha1} | ||||
|                             > | ||||
|                                 ${t`DSA-SHA1`} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: "RSA-SHA1", | ||||
|                                     value: SignatureAlgorithmEnum._200009XmldsigrsaSha1, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "RSA-SHA256", | ||||
|                                     value: SignatureAlgorithmEnum._200104XmldsigMorersaSha256, | ||||
|                                     default: true, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "RSA-SHA384", | ||||
|                                     value: SignatureAlgorithmEnum._200104XmldsigMorersaSha384, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "RSA-SHA512", | ||||
|                                     value: SignatureAlgorithmEnum._200104XmldsigMorersaSha512, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "DSA-SHA1", | ||||
|                                     value: SignatureAlgorithmEnum._200009XmldsigdsaSha1, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.signatureAlgorithm} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                     </ak-form-element-horizontal> | ||||
|                 </div> | ||||
|             </ak-form-group> | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -2,10 +2,10 @@ import { UserMatchingModeToLabel } from "@goauthentik/admin/sources/oauth/utils" | ||||
| import { DEFAULT_CONFIG, config } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -2,10 +2,10 @@ import { UserMatchingModeToLabel } from "@goauthentik/admin/sources/oauth/utils" | ||||
| import { DEFAULT_CONFIG, config } from "@goauthentik/common/api/config"; | ||||
| import { PlexAPIClient, PlexResource, popupCenterScreen } from "@goauthentik/common/helpers/plex"; | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -4,6 +4,7 @@ import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/utils/TimeDeltaHelp"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
| @ -242,26 +243,26 @@ export class SAMLSourceForm extends ModelForm<SAMLSource, string> { | ||||
|                         ?required=${true} | ||||
|                         name="bindingType" | ||||
|                     > | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value=${BindingTypeEnum.Redirect} | ||||
|                                 ?selected=${this.instance?.bindingType === BindingTypeEnum.Redirect} | ||||
|                             > | ||||
|                                 ${t`Redirect binding`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${BindingTypeEnum.PostAuto} | ||||
|                                 ?selected=${this.instance?.bindingType === BindingTypeEnum.PostAuto} | ||||
|                             > | ||||
|                                 ${t`Post binding (auto-submit)`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${BindingTypeEnum.Post} | ||||
|                                 ?selected=${this.instance?.bindingType === BindingTypeEnum.Post} | ||||
|                             > | ||||
|                                 ${t`Post binding`} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: t`Redirect binding`, | ||||
|                                     value: BindingTypeEnum.Redirect, | ||||
|                                     default: true, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: t`Post-auto binding`, | ||||
|                                     value: BindingTypeEnum.PostAuto, | ||||
|                                     description: html`${t`Post binding but the request is automatically sent and the user doesn't have to confirm.`}`, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: t`Post binding`, | ||||
|                                     value: BindingTypeEnum.Post, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.bindingType} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                     </ak-form-element-horizontal> | ||||
|                     <ak-form-element-horizontal label=${t`Signing keypair`} name="signingKp"> | ||||
|                         <ak-search-select | ||||
| @ -394,81 +395,62 @@ export class SAMLSourceForm extends ModelForm<SAMLSource, string> { | ||||
|                         ?required=${true} | ||||
|                         name="digestAlgorithm" | ||||
|                     > | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200009Xmldsigsha1} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                 DigestAlgorithmEnum._200009Xmldsigsha1} | ||||
|                             > | ||||
|                                 ${t`SHA1`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200104Xmlencsha256} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                     DigestAlgorithmEnum._200104Xmlencsha256 || | ||||
|                                 this.instance?.digestAlgorithm === undefined} | ||||
|                             > | ||||
|                                 ${t`SHA256`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200104XmldsigMoresha384} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                 DigestAlgorithmEnum._200104XmldsigMoresha384} | ||||
|                             > | ||||
|                                 ${t`SHA384`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${DigestAlgorithmEnum._200104Xmlencsha512} | ||||
|                                 ?selected=${this.instance?.digestAlgorithm === | ||||
|                                 DigestAlgorithmEnum._200104Xmlencsha512} | ||||
|                             > | ||||
|                                 ${t`SHA512`} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: "SHA1", | ||||
|                                     value: DigestAlgorithmEnum._200009Xmldsigsha1, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "SHA256", | ||||
|                                     value: DigestAlgorithmEnum._200104Xmlencsha256, | ||||
|                                     default: true, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "SHA384", | ||||
|                                     value: DigestAlgorithmEnum._200104XmldsigMoresha384, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "SHA512", | ||||
|                                     value: DigestAlgorithmEnum._200104Xmlencsha512, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.digestAlgorithm} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                     </ak-form-element-horizontal> | ||||
|                     <ak-form-element-horizontal | ||||
|                         label=${t`Signature algorithm`} | ||||
|                         ?required=${true} | ||||
|                         name="signatureAlgorithm" | ||||
|                     > | ||||
|                         <select class="pf-c-form-control"> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200009XmldsigrsaSha1} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200009XmldsigrsaSha1} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA1`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200104XmldsigMorersaSha256} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                     SignatureAlgorithmEnum._200104XmldsigMorersaSha256 || | ||||
|                                 this.instance?.signatureAlgorithm === undefined} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA256`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200104XmldsigMorersaSha384} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200104XmldsigMorersaSha384} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA384`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200104XmldsigMorersaSha512} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200104XmldsigMorersaSha512} | ||||
|                             > | ||||
|                                 ${t`RSA-SHA512`} | ||||
|                             </option> | ||||
|                             <option | ||||
|                                 value=${SignatureAlgorithmEnum._200009XmldsigdsaSha1} | ||||
|                                 ?selected=${this.instance?.signatureAlgorithm === | ||||
|                                 SignatureAlgorithmEnum._200009XmldsigdsaSha1} | ||||
|                             > | ||||
|                                 ${t`DSA-SHA1`} | ||||
|                             </option> | ||||
|                         </select> | ||||
|                         <ak-radio | ||||
|                             .options=${[ | ||||
|                                 { | ||||
|                                     label: "RSA-SHA1", | ||||
|                                     value: SignatureAlgorithmEnum._200009XmldsigrsaSha1, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "RSA-SHA256", | ||||
|                                     value: SignatureAlgorithmEnum._200104XmldsigMorersaSha256, | ||||
|                                     default: true, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "RSA-SHA384", | ||||
|                                     value: SignatureAlgorithmEnum._200104XmldsigMorersaSha384, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "RSA-SHA512", | ||||
|                                     value: SignatureAlgorithmEnum._200104XmldsigMorersaSha512, | ||||
|                                 }, | ||||
|                                 { | ||||
|                                     label: "DSA-SHA1", | ||||
|                                     value: SignatureAlgorithmEnum._200009XmldsigdsaSha1, | ||||
|                                 }, | ||||
|                             ]} | ||||
|                             .value=${this.instance?.signatureAlgorithm} | ||||
|                         > | ||||
|                         </ak-radio> | ||||
|                     </ak-form-element-horizontal> | ||||
|                 </div> | ||||
|             </ak-form-group> | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,11 +1,11 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { MessageLevel } from "@goauthentik/common/messages"; | ||||
| import "@goauthentik/elements/Divider"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/buttons/ActionButton"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModalForm } from "@goauthentik/elements/forms/ModalForm"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import { showMessage } from "@goauthentik/elements/messages/MessageContainer"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -1,9 +1,10 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -106,20 +107,21 @@ export class AuthenticatorSMSStageForm extends ModelForm<AuthenticatorSMSStage, | ||||
|                 ?required=${true} | ||||
|                 name="authType" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value="${AuthTypeEnum.Basic}" | ||||
|                         ?selected=${this.instance?.authType === AuthTypeEnum.Basic} | ||||
|                     > | ||||
|                         ${t`Basic Auth`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value="${AuthTypeEnum.Bearer}" | ||||
|                         ?selected=${this.instance?.authType === AuthTypeEnum.Bearer} | ||||
|                     > | ||||
|                         ${t`Bearer Token`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: t`Basic Auth`, | ||||
|                             value: AuthTypeEnum.Basic, | ||||
|                             default: true, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: t`Bearer Token`, | ||||
|                             value: AuthTypeEnum.Bearer, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.authType} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal | ||||
|                 label=${t`External API URL`} | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first, groupBy } 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| 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 "@goauthentik/elements/forms/SearchSelect"; | ||||
| import YAML from "yaml"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| 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"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
| @ -1,10 +1,10 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
| import { DefaultTenant } from "@goauthentik/elements/sidebar/SidebarBrand"; | ||||
| import YAML from "yaml"; | ||||
|  | ||||
|  | ||||
| @ -1,9 +1,10 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { dateTimeLocal, 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"; | ||||
| import "@goauthentik/elements/forms/Radio"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
| @ -82,20 +83,23 @@ export class TokenForm extends ModelForm<Token, string> { | ||||
|                 </ak-search-select> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Intent`} ?required=${true} name="intent"> | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option | ||||
|                         value=${IntentEnum.Api} | ||||
|                         ?selected=${this.instance?.intent === IntentEnum.Api} | ||||
|                     > | ||||
|                         ${t`API Token (can be used to access the API programmatically)`} | ||||
|                     </option> | ||||
|                     <option | ||||
|                         value=${IntentEnum.AppPassword} | ||||
|                         ?selected=${this.instance?.intent === IntentEnum.AppPassword} | ||||
|                     > | ||||
|                         ${t`App password (can be used to login using a flow executor)`} | ||||
|                     </option> | ||||
|                 </select> | ||||
|                 <ak-radio | ||||
|                     .options=${[ | ||||
|                         { | ||||
|                             label: t`API Token`, | ||||
|                             value: IntentEnum.Api, | ||||
|                             default: true, | ||||
|                             description: html`${t`Used to access the API programmatically`}`, | ||||
|                         }, | ||||
|                         { | ||||
|                             label: t`App password.`, | ||||
|                             value: IntentEnum.AppPassword, | ||||
|                             description: html`${t`Used to login using a flow executor`}`, | ||||
|                         }, | ||||
|                     ]} | ||||
|                     .value=${this.instance?.intent} | ||||
|                 > | ||||
|                 </ak-radio> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Description`} name="description"> | ||||
|                 <input | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { groupBy } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import { Form } from "@goauthentik/elements/forms/Form"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import "@goauthentik/elements/forms/SearchSelect"; | ||||
|  | ||||
| import { t } from "@lingui/macro"; | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jens L
					Jens L