Compare commits

...

1 Commits

Author SHA1 Message Date
f9e129bed2 web: Apply linter fixes. Update tests. 2025-04-02 19:03:29 +02:00
201 changed files with 1334 additions and 1069 deletions

View File

@ -13,6 +13,7 @@ const MAX_PARAMS = 5;
// const MAX_COGNITIVE_COMPLEXITY = 9;
const rules = {
"no-param-reassign": "error",
"accessor-pairs": "error",
"array-callback-return": "error",
"block-scoped-var": "error",
@ -84,7 +85,6 @@ const rules = {
"no-obj-calls": "error",
"no-octal": "error",
"no-octal-escape": "error",
"no-param-reassign": "error",
"no-proto": "error",
"no-redeclare": "error",
"no-regex-spaces": "error",
@ -134,6 +134,7 @@ const rules = {
// "sonarjs/cognitive-complexity": ["off", MAX_COGNITIVE_COMPLEXITY],
// "sonarjs/no-duplicate-string": "off",
// "sonarjs/no-nested-template-literals": "off",
" @typescript-eslint/no-namespace": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-unused-vars": [
"error",

View File

@ -48,6 +48,7 @@ export default [
// "sonarjs/no-duplicate-string": "off",
// "sonarjs/no-nested-template-literals": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{

View File

@ -19,7 +19,7 @@ import { AdminApi, CapabilitiesEnum, LicenseSummaryStatusEnum } from "@goauthent
@customElement("ak-about-modal")
export class AboutModal extends WithLicenseSummary(WithBrandConfig(ModalButton)) {
static get styles() {
return super.styles.concat(
return ModalButton.styles.concat(
PFAbout,
css`
.pf-c-about-modal-box__hero {
@ -59,7 +59,7 @@ export class AboutModal extends WithLicenseSummary(WithBrandConfig(ModalButton))
renderModal() {
let product = globalAK().brand.brandingTitle || DefaultBrand.brandingTitle;
if (this.licenseSummary.status != LicenseSummaryStatusEnum.Unlicensed) {
if (this.licenseSummary.status !== LicenseSummaryStatusEnum.Unlicensed) {
product += ` ${msg("Enterprise")}`;
}
return html`<div

View File

@ -46,7 +46,7 @@ export class SystemStatusCard extends AdminStatusCard<SystemInfo> {
return;
}
const outpost = outposts.results[0];
outpost.config["authentik_host"] = window.location.origin;
outpost.config.authentik_host = window.location.origin;
await new OutpostsApi(DEFAULT_CONFIG).outpostsInstancesUpdate({
uuid: outpost.pk,
outpostRequest: outpost,

View File

@ -28,16 +28,18 @@ export class WorkersStatusCard extends AdminStatusCard<Worker[]> {
icon: "fa fa-times-circle pf-m-danger",
message: html`${msg("No workers connected. Background tasks will not run.")}`,
});
} else if (value.filter((w) => !w.versionMatching).length > 0) {
}
if (value.filter((w) => !w.versionMatching).length > 0) {
return Promise.resolve<AdminStatus>({
icon: "fa fa-times-circle pf-m-danger",
message: html`${msg("Worker with incorrect version connected.")}`,
});
} else {
return Promise.resolve<AdminStatus>({
icon: "fa fa-check-circle pf-m-success",
});
}
return Promise.resolve<AdminStatus>({
icon: "fa fa-check-circle pf-m-success",
});
}
renderValue() {

View File

@ -127,7 +127,7 @@ export class SyncStatusChart extends AKChart<SummarizedSyncStatus[]> {
msg("LDAP Source"),
),
];
this.centerText = statuses.reduce((total, el) => (total += el.total), 0).toString();
this.centerText = statuses.reduce((total, el) => total + el.total, 0).toString();
return statuses;
}

View File

@ -6,26 +6,26 @@ import { html } from "lit";
import "../AdminSettingsFooterLinks.js";
describe("ak-admin-settings-footer-link", () => {
afterEach(async () => {
await browser.execute(async () => {
await document.body.querySelector("ak-admin-settings-footer-link")?.remove();
if (document.body["_$litPart$"]) {
// @ts-expect-error expression of type '"_$litPart$"' is added by Lit
await delete document.body["_$litPart$"];
afterEach(() => {
return browser.execute(() => {
document.body.querySelector("ak-admin-settings-footer-link")?.remove();
if ("_$litPart$" in document.body) {
delete document.body._$litPart$;
}
});
});
it("should render an empty control", async () => {
render(html`<ak-admin-settings-footer-link name="link"></ak-admin-settings-footer-link>`);
const link = await $("ak-admin-settings-footer-link");
const link = $("ak-admin-settings-footer-link");
await expect(await link.getProperty("isValid")).toStrictEqual(false);
await expect(await link.getProperty("toJson")).toEqual({ name: "", href: "" });
});
it("should not be valid if just a name is filled in", async () => {
render(html`<ak-admin-settings-footer-link name="link"></ak-admin-settings-footer-link>`);
const link = await $("ak-admin-settings-footer-link");
const link = $("ak-admin-settings-footer-link");
await link.$('input[name="name"]').setValue("foo");
await expect(await link.getProperty("isValid")).toStrictEqual(false);
await expect(await link.getProperty("toJson")).toEqual({ name: "foo", href: "" });
@ -33,7 +33,7 @@ describe("ak-admin-settings-footer-link", () => {
it("should be valid if just a URL is filled in", async () => {
render(html`<ak-admin-settings-footer-link name="link"></ak-admin-settings-footer-link>`);
const link = await $("ak-admin-settings-footer-link");
const link = $("ak-admin-settings-footer-link");
await link.$('input[name="href"]').setValue("https://foo.com");
await expect(await link.getProperty("isValid")).toStrictEqual(true);
await expect(await link.getProperty("toJson")).toEqual({
@ -44,7 +44,7 @@ describe("ak-admin-settings-footer-link", () => {
it("should be valid if both are filled in", async () => {
render(html`<ak-admin-settings-footer-link name="link"></ak-admin-settings-footer-link>`);
const link = await $("ak-admin-settings-footer-link");
const link = $("ak-admin-settings-footer-link");
await link.$('input[name="name"]').setValue("foo");
await link.$('input[name="href"]').setValue("https://foo.com");
await expect(await link.getProperty("isValid")).toStrictEqual(true);
@ -56,7 +56,7 @@ describe("ak-admin-settings-footer-link", () => {
it("should not be valid if the URL is not valid", async () => {
render(html`<ak-admin-settings-footer-link name="link"></ak-admin-settings-footer-link>`);
const link = await $("ak-admin-settings-footer-link");
const link = $("ak-admin-settings-footer-link");
await link.$('input[name="name"]').setValue("foo");
await link.$('input[name="href"]').setValue("never://foo.com");
await expect(await link.getProperty("toJson")).toEqual({

View File

@ -79,7 +79,7 @@ export class ApplicationForm extends WithCapabilitiesConfig(ModelForm<Applicatio
});
}
if (this.can(CapabilitiesEnum.CanSaveMedia)) {
const icon = this.getFormFiles()["metaIcon"];
const icon = this.getFormFiles().metaIcon;
if (icon || this.clearIcon) {
await new CoreApi(DEFAULT_CONFIG).coreApplicationsSetIconCreate({
slug: app.slug,
@ -117,7 +117,7 @@ export class ApplicationForm extends WithCapabilitiesConfig(ModelForm<Applicatio
if (!(ev instanceof InputEvent) || !ev.target) {
return;
}
this.clearIcon = !!(ev.target as HTMLInputElement).checked;
this.clearIcon = Boolean((ev.target as HTMLInputElement).checked);
}
renderForm(): TemplateResult {

View File

@ -71,7 +71,7 @@ export class ApplicationListPage extends WithBrandConfig(TablePage<Application>)
}
static get styles(): CSSResult[] {
return super.styles.concat(PFCard, applicationListStyle);
return TablePage.styles.concat(PFCard, applicationListStyle);
}
columns(): TableColumn[] {

View File

@ -6,7 +6,7 @@ import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import "@goauthentik/elements/forms/Radio";
import "@goauthentik/elements/forms/SearchSelect";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { CSSResult } from "lit";
@ -31,9 +31,8 @@ export class ApplicationEntitlementForm extends ModelForm<ApplicationEntitlement
getSuccessMessage(): string {
if (this.instance?.pbmUuid) {
return msg("Successfully updated entitlement.");
} else {
return msg("Successfully created entitlement.");
}
return msg("Successfully created entitlement.");
}
static get styles(): CSSResult[] {
@ -49,11 +48,10 @@ export class ApplicationEntitlementForm extends ModelForm<ApplicationEntitlement
pbmUuid: this.instance.pbmUuid || "",
applicationEntitlementRequest: data,
});
} else {
return new CoreApi(DEFAULT_CONFIG).coreApplicationEntitlementsCreate({
applicationEntitlementRequest: data,
});
}
return new CoreApi(DEFAULT_CONFIG).coreApplicationEntitlementsCreate({
applicationEntitlementRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -15,7 +15,6 @@ import {
ProviderModelEnum,
ProxyMode,
ProxyProvider,
RACProvider,
RadiusProvider,
RedirectURI,
SAMLProvider,
@ -51,9 +50,8 @@ function renderRadiusOverview(rawProvider: OneOfProvider) {
]);
}
function renderRACOverview(rawProvider: OneOfProvider) {
// @ts-expect-error TS6133
const _provider = rawProvider as RACProvider;
function renderRACOverview(_rawProvider: OneOfProvider) {
// const _provider = rawProvider as RACProvider;
}
function formatRedirectUris(uris: RedirectURI[] = []) {

View File

@ -1,14 +1,13 @@
import { policyOptions } from "@goauthentik/admin/applications/PolicyOptions.js";
import { ApplicationWizardStep } from "@goauthentik/admin/applications/wizard/ApplicationWizardStep.js";
import "@goauthentik/admin/applications/wizard/ak-wizard-title.js";
import { isSlug } from "@goauthentik/common/utils.js";
import { isSlug, isURLInput } from "@goauthentik/common/utils.js";
import { camelToSnake } from "@goauthentik/common/utils.js";
import "@goauthentik/components/ak-radio-input";
import "@goauthentik/components/ak-slug-input";
import "@goauthentik/components/ak-switch-input";
import "@goauthentik/components/ak-text-input";
import { type NavigableButton, type WizardButton } from "@goauthentik/components/ak-wizard/types";
import { type KeyUnknown } from "@goauthentik/elements/forms/Form";
import "@goauthentik/elements/forms/FormGroup";
import "@goauthentik/elements/forms/HorizontalFormElement";
@ -21,13 +20,25 @@ import { type ApplicationRequest } from "@goauthentik/api";
import { ApplicationWizardStateUpdate, ValidationRecord } from "../types";
const autoTrim = (v: unknown) => (typeof v === "string" ? v.trim() : v);
/**
* Plucks the specified keys from an object, trimming their values if they are strings.
*
* @template T - The type of the input object.
* @template K - The keys to be plucked from the input object.
*
* @param {T} input - The input object.
* @param {Array<K>} keys - The keys to be plucked from the input object.
*/
function trimMany<T extends object, K extends keyof T>(input: T, keys: Array<K>): Pick<T, K> {
const result: Partial<T> = {};
const trimMany = (o: KeyUnknown, vs: string[]) =>
Object.fromEntries(vs.map((v) => [v, autoTrim(o[v])]));
for (const key of keys) {
const value = input[key];
result[key] = (typeof value === "string" ? value.trim() : value) as T[K];
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const isStr = (v: any): v is string => typeof v === "string";
return result as Pick<T, K>;
}
@customElement("ak-application-wizard-application-step")
export class ApplicationWizardApplicationStep extends ApplicationWizardStep {
@ -37,7 +48,7 @@ export class ApplicationWizardApplicationStep extends ApplicationWizardStep {
errors = new Map<string, string>();
@query("form#applicationform")
form!: HTMLFormElement;
declare form: HTMLFormElement;
constructor() {
super();
@ -54,27 +65,34 @@ export class ApplicationWizardApplicationStep extends ApplicationWizardStep {
}
get buttons(): WizardButton[] {
return [{ kind: "next", destination: "provider-choice" }, { kind: "cancel" }];
return [
// ---
{ kind: "next", destination: "provider-choice" },
{ kind: "cancel" },
];
}
get valid() {
this.errors = new Map();
const values = trimMany(this.formValues ?? {}, ["metaLaunchUrl", "name", "slug"]);
if (values["name"] === "") {
const trimmed = trimMany((this.formValues || {}) as Partial<ApplicationRequest>, [
"name",
"slug",
"metaLaunchUrl",
]);
if (!trimmed.name) {
this.errors.set("name", msg("An application name is required"));
}
if (
!(
isStr(values["metaLaunchUrl"]) &&
(values["metaLaunchUrl"] === "" || URL.canParse(values["metaLaunchUrl"]))
)
) {
if (!isURLInput(trimmed.metaLaunchUrl)) {
this.errors.set("metaLaunchUrl", msg("Not a valid URL"));
}
if (!(isStr(values["slug"]) && values["slug"] !== "" && isSlug(values["slug"]))) {
if (!isSlug(trimmed.slug)) {
this.errors.set("slug", msg("Not a valid slug"));
}
return this.errors.size === 0;
}
@ -82,27 +100,39 @@ export class ApplicationWizardApplicationStep extends ApplicationWizardStep {
if (button.kind === "next") {
if (!this.valid) {
this.handleEnabling({
disabled: ["provider-choice", "provider", "bindings", "submit"],
disabled: [
// ---
"provider-choice",
"provider",
"bindings",
"submit",
],
});
return;
}
const app: Partial<ApplicationRequest> = this.formValues as Partial<ApplicationRequest>;
let payload: ApplicationWizardStateUpdate = {
app: this.formValues,
errors: this.removeErrors("app"),
};
if (app.name && (this.wizard.provider?.name ?? "").trim() === "") {
payload = {
...payload,
provider: { name: `Provider for ${app.name}` },
};
}
this.handleUpdate(payload, button.destination, {
enable: "provider-choice",
});
return;
}
super.handleButton(button);
}
@ -181,6 +211,7 @@ export class ApplicationWizardApplicationStep extends ApplicationWizardStep {
if (!(this.wizard.app && this.wizard.errors)) {
throw new Error("Application Step received uninitialized wizard context.");
}
return this.renderForm(
this.wizard.app as ApplicationRequest,
this.wizard.errors?.app ?? {},

View File

@ -45,7 +45,7 @@ export class ApplicationWizardEditBindingStep extends ApplicationWizardStep {
hide = true;
@query("form#bindingform")
form!: HTMLFormElement;
declare form: HTMLFormElement;
@query(".policy-search-select")
searchSelect!: SearchSelectBase<Policy> | SearchSelectBase<Group> | SearchSelectBase<User>;

View File

@ -22,7 +22,7 @@ export class ApplicationWizardProviderSamlForm extends ApplicationWizardProvider
const setHasSigningKp = (ev: InputEvent) => {
const target = ev.target as AkCryptoCertificateSearch;
if (!target) return;
this.hasSigningKp = !!target.selectedKeypair;
this.hasSigningKp = Boolean(target.selectedKeypair);
};
return html` <ak-wizard-title>${this.label}</ak-wizard-title>

View File

@ -8,7 +8,7 @@ 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 * as YAML from "yaml";
import { msg } from "@lit/localize";
import { CSSResult, TemplateResult, html } from "lit";
@ -59,11 +59,10 @@ export class BlueprintForm extends ModelForm<BlueprintInstance, string> {
instanceUuid: this.instance.pk,
blueprintInstanceRequest: data,
});
} else {
return new ManagedApi(DEFAULT_CONFIG).managedBlueprintsCreate({
blueprintInstanceRequest: data,
});
}
return new ManagedApi(DEFAULT_CONFIG).managedBlueprintsCreate({
blueprintInstanceRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -9,7 +9,7 @@ import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import "@goauthentik/elements/forms/SearchSelect";
import { DefaultBrand } from "@goauthentik/elements/sidebar/SidebarBrand";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { TemplateResult, html } from "lit";
@ -43,11 +43,10 @@ export class BrandForm extends ModelForm<Brand, string> {
brandUuid: this.instance.brandUuid,
brandRequest: data,
});
} else {
return new CoreApi(DEFAULT_CONFIG).coreBrandsCreate({
brandRequest: data,
});
}
return new CoreApi(DEFAULT_CONFIG).coreBrandsCreate({
brandRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -107,7 +107,7 @@ export class AkCryptoCertificateSearch extends CustomListenerElement(AKElement)
selected(item: CertificateKeyPair, items: CertificateKeyPair[]) {
return (
(this.singleton && !this.certificate && items.length === 1) ||
(!!this.certificate && this.certificate === item.pk)
(Boolean(this.certificate) && this.certificate === item.pk)
);
}

View File

@ -29,7 +29,7 @@ const metadata: Meta<AkCryptoCertificateSearch> = {
argTypes: {
// Typescript is unaware that arguments for components are treated as properties, and
// properties are typically renamed to lower case, even if the variable is not.
// @ts-expect-error
// @ts-expect-error TODO: Explain.
nokey: {
control: "boolean",
description:
@ -75,7 +75,7 @@ export const CryptoCertificateSearch = () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const showMessage = (ev: CustomEvent<any>) => {
const detail = ev.detail;
delete detail["target"];
delete detail.target;
document.getElementById("message-pad")!.innerText = `Event: ${JSON.stringify(
detail,
null,

View File

@ -30,11 +30,10 @@ export class CertificateKeyPairForm extends ModelForm<CertificateKeyPair, string
kpUuid: this.instance.pk || "",
patchedCertificateKeyPairRequest: data,
});
} else {
return new CryptoApi(DEFAULT_CONFIG).cryptoCertificatekeypairsCreate({
certificateKeyPairRequest: data as unknown as CertificateKeyPairRequest,
});
}
return new CryptoApi(DEFAULT_CONFIG).cryptoCertificatekeypairsCreate({
certificateKeyPairRequest: data as unknown as CertificateKeyPairRequest,
});
}
renderForm(): TemplateResult {

View File

@ -51,11 +51,10 @@ export class RuleForm extends ModelForm<NotificationRule, string> {
pbmUuid: this.instance.pk || "",
notificationRuleRequest: data,
});
} else {
return new EventsApi(DEFAULT_CONFIG).eventsRulesCreate({
notificationRuleRequest: data,
});
}
return new EventsApi(DEFAULT_CONFIG).eventsRulesCreate({
notificationRuleRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -47,11 +47,10 @@ export class TransportForm extends ModelForm<NotificationTransport, string> {
uuid: this.instance.pk || "",
notificationTransportRequest: data,
});
} else {
return new EventsApi(DEFAULT_CONFIG).eventsTransportsCreate({
notificationTransportRequest: data,
});
}
return new EventsApi(DEFAULT_CONFIG).eventsTransportsCreate({
notificationTransportRequest: data,
});
}
onModeChange(mode: string | undefined): void {

View File

@ -58,7 +58,7 @@ export class FlowForm extends WithCapabilitiesConfig(ModelForm<Flow, string>) {
}
if (this.can(CapabilitiesEnum.CanSaveMedia)) {
const icon = this.getFormFiles()["background"];
const icon = this.getFormFiles().background;
if (icon || this.clearBackground) {
await new FlowsApi(DEFAULT_CONFIG).flowsInstancesSetBackgroundCreate({
slug: flow.slug,

View File

@ -27,7 +27,7 @@ export class FlowImportForm extends Form<Flow> {
}
async send(): Promise<FlowImportResult> {
const file = this.getFormFiles()["flow"];
const file = this.getFormFiles().flow;
if (!file) {
throw new SentryIgnoredError("No form data");
}

View File

@ -39,9 +39,8 @@ export class StageBindingForm extends ModelForm<FlowStageBinding, string> {
getSuccessMessage(): string {
if (this.instance?.pk) {
return msg("Successfully updated binding.");
} else {
return msg("Successfully created binding.");
}
return msg("Successfully created binding.");
}
send(data: FlowStageBinding): Promise<unknown> {
@ -50,14 +49,13 @@ export class StageBindingForm extends ModelForm<FlowStageBinding, string> {
fsbUuid: this.instance.pk,
patchedFlowStageBindingRequest: data,
});
} else {
if (this.targetPk) {
data.target = this.targetPk;
}
return new FlowsApi(DEFAULT_CONFIG).flowsBindingsCreate({
flowStageBindingRequest: data,
});
}
if (this.targetPk) {
data.target = this.targetPk;
}
return new FlowsApi(DEFAULT_CONFIG).flowsBindingsCreate({
flowStageBindingRequest: data,
});
}
async getOrder(): Promise<number> {

View File

@ -10,7 +10,7 @@ import "@goauthentik/elements/chips/ChipGroup";
import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import "@goauthentik/elements/forms/SearchSelect";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { CSSResult, TemplateResult, css, html } from "lit";
@ -55,12 +55,11 @@ export class GroupForm extends ModelForm<Group, string> {
groupUuid: this.instance.pk,
patchedGroupRequest: data,
});
} else {
data.users = [];
return new CoreApi(DEFAULT_CONFIG).coreGroupsCreate({
groupRequest: data,
});
}
data.users = [];
return new CoreApi(DEFAULT_CONFIG).coreGroupsCreate({
groupRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -125,7 +125,8 @@ export class RelatedGroupList extends Table<Group> {
buttonLabel=${msg("Remove")}
.objects=${this.selectedElements}
.delete=${(item: Group) => {
if (!this.targetUser) return;
if (!this.targetUser) return null;
return new CoreApi(DEFAULT_CONFIG).coreGroupsRemoveUserCreate({
groupUuid: item.pk,
userAccountRequest: {

View File

@ -46,8 +46,12 @@ import {
User,
} from "@goauthentik/api";
interface AddUsersToGroupFormData {
users: number[];
}
@customElement("ak-user-related-add")
export class RelatedUserAdd extends Form<{ users: number[] }> {
export class RelatedUserAdd extends Form<AddUsersToGroupFormData> {
@property({ attribute: false })
group?: Group;
@ -58,7 +62,7 @@ export class RelatedUserAdd extends Form<{ users: number[] }> {
return msg("Successfully added user(s).");
}
async send(data: { users: number[] }): Promise<{ users: number[] }> {
async send(data: AddUsersToGroupFormData): Promise<AddUsersToGroupFormData> {
await Promise.all(
data.users.map((user) => {
return new CoreApi(DEFAULT_CONFIG).coreGroupsAddUserCreate({
@ -69,6 +73,7 @@ export class RelatedUserAdd extends Form<{ users: number[] }> {
});
}),
);
return data;
}
@ -133,7 +138,7 @@ export class RelatedUserList extends WithBrandConfig(WithCapabilitiesConfig(Tabl
me?: SessionUser;
static get styles(): CSSResult[] {
return super.styles.concat(PFDescriptionList, PFAlert, PFBanner);
return Table.styles.concat(PFDescriptionList, PFAlert, PFBanner);
}
async apiEndpoint(): Promise<PaginatedResponse<User>> {

View File

@ -65,7 +65,7 @@ export class OutpostDeploymentModal extends ModalButton {
</label>
<input class="pf-c-form-control" readonly type="text" value="true" />
</div>
${this.outpost?.type == OutpostTypeEnum.Proxy
${this.outpost?.type === OutpostTypeEnum.Proxy
? html`
<h3>
${msg(

View File

@ -10,7 +10,7 @@ import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import "@goauthentik/elements/forms/SearchSelect";
import { PaginatedResponse } from "@goauthentik/elements/table/Table";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { TemplateResult, html } from "lit";
@ -129,11 +129,10 @@ export class OutpostForm extends ModelForm<Outpost, string> {
uuid: this.instance.pk || "",
outpostRequest: data,
});
} else {
return new OutpostsApi(DEFAULT_CONFIG).outpostsInstancesCreate({
outpostRequest: data,
});
}
return new OutpostsApi(DEFAULT_CONFIG).outpostsInstancesCreate({
outpostRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -32,11 +32,10 @@ export class ServiceConnectionDockerForm extends ModelForm<DockerServiceConnecti
uuid: this.instance.pk || "",
dockerServiceConnectionRequest: data,
});
} else {
return new OutpostsApi(DEFAULT_CONFIG).outpostsServiceConnectionsDockerCreate({
dockerServiceConnectionRequest: data,
});
}
return new OutpostsApi(DEFAULT_CONFIG).outpostsServiceConnectionsDockerCreate({
dockerServiceConnectionRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -4,7 +4,7 @@ import "@goauthentik/elements/CodeMirror";
import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror";
import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { TemplateResult, html } from "lit";
@ -36,11 +36,10 @@ export class ServiceConnectionKubernetesForm extends ModelForm<
uuid: this.instance.pk || "",
kubernetesServiceConnectionRequest: data,
});
} else {
return new OutpostsApi(DEFAULT_CONFIG).outpostsServiceConnectionsKubernetesCreate({
kubernetesServiceConnectionRequest: data,
});
}
return new OutpostsApi(DEFAULT_CONFIG).outpostsServiceConnectionsKubernetesCreate({
kubernetesServiceConnectionRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -72,9 +72,8 @@ export class BoundPoliciesList extends Table<PolicyBinding> {
return msg(str`Group ${item.groupObj?.name}`);
} else if (item.user) {
return msg(str`User ${item.userObj?.name}`);
} else {
return msg("-");
}
return msg("-");
}
getPolicyUserGroupRow(item: PolicyBinding): TemplateResult {
@ -123,9 +122,8 @@ export class BoundPoliciesList extends Table<PolicyBinding> {
${msg("Edit User")}
</button>
</ak-forms-modal>`;
} else {
return html``;
}
return html``;
}
renderToolbarSelected(): TemplateResult {

View File

@ -72,9 +72,8 @@ export class PolicyBindingForm extends ModelForm<PolicyBinding, string> {
getSuccessMessage(): string {
if (this.instance?.pk) {
return msg("Successfully updated binding.");
} else {
return msg("Successfully created binding.");
}
return msg("Successfully created binding.");
}
static get styles(): CSSResult[] {
@ -111,11 +110,10 @@ export class PolicyBindingForm extends ModelForm<PolicyBinding, string> {
policyBindingUuid: this.instance.pk,
policyBindingRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesBindingsCreate({
policyBindingRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesBindingsCreate({
policyBindingRequest: data,
});
}
async getOrder(): Promise<number> {

View File

@ -7,7 +7,7 @@ import "@goauthentik/elements/events/LogViewer";
import { Form } from "@goauthentik/elements/forms/Form";
import "@goauthentik/elements/forms/HorizontalFormElement";
import "@goauthentik/elements/forms/SearchSelect";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { CSSResult, TemplateResult, html } from "lit";

View File

@ -25,11 +25,11 @@ export class DummyPolicyForm extends BasePolicyForm<DummyPolicy> {
policyUuid: this.instance.pk || "",
dummyPolicyRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesDummyCreate({
dummyPolicyRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesDummyCreate({
dummyPolicyRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -37,11 +37,10 @@ export class EventMatcherPolicyForm extends BasePolicyForm<EventMatcherPolicy> {
policyUuid: this.instance.pk || "",
eventMatcherPolicyRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesEventMatcherCreate({
eventMatcherPolicyRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesEventMatcherCreate({
eventMatcherPolicyRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -25,11 +25,10 @@ export class PasswordExpiryPolicyForm extends BasePolicyForm<PasswordExpiryPolic
policyUuid: this.instance.pk || "",
passwordExpiryPolicyRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesPasswordExpiryCreate({
passwordExpiryPolicyRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesPasswordExpiryCreate({
passwordExpiryPolicyRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -28,11 +28,10 @@ export class ExpressionPolicyForm extends BasePolicyForm<ExpressionPolicy> {
policyUuid: this.instance.pk || "",
expressionPolicyRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesExpressionCreate({
expressionPolicyRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesExpressionCreate({
expressionPolicyRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -39,11 +39,10 @@ export class GeoIPPolicyForm extends BasePolicyForm<GeoIPPolicy> {
policyUuid: this.instance.pk || "",
geoIPPolicyRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesGeoipCreate({
geoIPPolicyRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesGeoipCreate({
geoIPPolicyRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -38,11 +38,10 @@ export class PasswordPolicyForm extends BasePolicyForm<PasswordPolicy> {
policyUuid: this.instance.pk || "",
passwordPolicyRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesPasswordCreate({
passwordPolicyRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesPasswordCreate({
passwordPolicyRequest: data,
});
}
renderStaticRules(): TemplateResult {

View File

@ -25,11 +25,10 @@ export class ReputationPolicyForm extends BasePolicyForm<ReputationPolicy> {
policyUuid: this.instance.pk || "",
reputationPolicyRequest: data,
});
} else {
return new PoliciesApi(DEFAULT_CONFIG).policiesReputationCreate({
reputationPolicyRequest: data,
});
}
return new PoliciesApi(DEFAULT_CONFIG).policiesReputationCreate({
reputationPolicyRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -21,11 +21,10 @@ export class PropertyMappingNotification extends BasePropertyMappingForm<Notific
pmUuid: this.instance.pk,
notificationWebhookMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsNotificationCreate({
notificationWebhookMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsNotificationCreate({
notificationWebhookMappingRequest: data,
});
}
}

View File

@ -25,13 +25,12 @@ export class PropertyMappingProviderGoogleWorkspaceForm extends BasePropertyMapp
pmUuid: this.instance.pk,
googleWorkspaceProviderMappingRequest: data,
});
} else {
return new PropertymappingsApi(
DEFAULT_CONFIG,
).propertymappingsProviderGoogleWorkspaceCreate({
googleWorkspaceProviderMappingRequest: data,
});
}
return new PropertymappingsApi(
DEFAULT_CONFIG,
).propertymappingsProviderGoogleWorkspaceCreate({
googleWorkspaceProviderMappingRequest: data,
});
}
}

View File

@ -25,13 +25,12 @@ export class PropertyMappingProviderMicrosoftEntraForm extends BasePropertyMappi
pmUuid: this.instance.pk,
microsoftEntraProviderMappingRequest: data,
});
} else {
return new PropertymappingsApi(
DEFAULT_CONFIG,
).propertymappingsProviderMicrosoftEntraCreate({
microsoftEntraProviderMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderMicrosoftEntraCreate(
{
microsoftEntraProviderMappingRequest: data,
},
);
}
}

View File

@ -46,11 +46,10 @@ export class PropertyMappingProviderRACForm extends BasePropertyMappingForm<RACP
pmUuid: this.instance.pk,
rACPropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderRacCreate({
rACPropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderRacCreate({
rACPropertyMappingRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -21,11 +21,10 @@ export class PropertyMappingProviderRadiusForm extends BasePropertyMappingForm<R
pmUuid: this.instance.pk,
radiusProviderPropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderRadiusCreate({
radiusProviderPropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderRadiusCreate({
radiusProviderPropertyMappingRequest: data,
});
}
}

View File

@ -24,11 +24,10 @@ export class PropertyMappingProviderSAMLForm extends BasePropertyMappingForm<SAM
pmUuid: this.instance.pk,
sAMLPropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderSamlCreate({
sAMLPropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderSamlCreate({
sAMLPropertyMappingRequest: data,
});
}
renderExtraFields(): TemplateResult {

View File

@ -21,11 +21,10 @@ export class PropertyMappingProviderSCIMForm extends BasePropertyMappingForm<SCI
pmUuid: this.instance.pk,
sCIMMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderScimCreate({
sCIMMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderScimCreate({
sCIMMappingRequest: data,
});
}
}

View File

@ -24,11 +24,10 @@ export class PropertyMappingProviderScopeForm extends BasePropertyMappingForm<Sc
pmUuid: this.instance.pk,
scopeMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderScopeCreate({
scopeMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsProviderScopeCreate({
scopeMappingRequest: data,
});
}
renderExtraFields(): TemplateResult {

View File

@ -25,11 +25,10 @@ export class PropertyMappingSourceKerberosForm extends BasePropertyMappingForm<K
pmUuid: this.instance.pk,
kerberosSourcePropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceKerberosCreate({
kerberosSourcePropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceKerberosCreate({
kerberosSourcePropertyMappingRequest: data,
});
}
}

View File

@ -25,11 +25,10 @@ export class PropertyMappingSourceLDAPForm extends BasePropertyMappingForm<LDAPS
pmUuid: this.instance.pk,
lDAPSourcePropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceLdapCreate({
lDAPSourcePropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceLdapCreate({
lDAPSourcePropertyMappingRequest: data,
});
}
}

View File

@ -25,11 +25,10 @@ export class PropertyMappingSourceOAuthForm extends BasePropertyMappingForm<OAut
pmUuid: this.instance.pk,
oAuthSourcePropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceOauthCreate({
oAuthSourcePropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceOauthCreate({
oAuthSourcePropertyMappingRequest: data,
});
}
}

View File

@ -25,11 +25,10 @@ export class PropertyMappingSourcePlexForm extends BasePropertyMappingForm<PlexS
pmUuid: this.instance.pk,
plexSourcePropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourcePlexCreate({
plexSourcePropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourcePlexCreate({
plexSourcePropertyMappingRequest: data,
});
}
}

View File

@ -25,11 +25,10 @@ export class PropertyMappingSourceSAMLForm extends BasePropertyMappingForm<SAMLS
pmUuid: this.instance.pk,
sAMLSourcePropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceSamlCreate({
sAMLSourcePropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceSamlCreate({
sAMLSourcePropertyMappingRequest: data,
});
}
}

View File

@ -25,11 +25,10 @@ export class PropertyMappingSourceSCIMForm extends BasePropertyMappingForm<SCIMS
pmUuid: this.instance.pk,
sCIMSourcePropertyMappingRequest: data,
});
} else {
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceScimCreate({
sCIMSourcePropertyMappingRequest: data,
});
}
return new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsSourceScimCreate({
sCIMSourcePropertyMappingRequest: data,
});
}
}

View File

@ -5,7 +5,7 @@ import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror";
import { Form } from "@goauthentik/elements/forms/Form";
import "@goauthentik/elements/forms/HorizontalFormElement";
import "@goauthentik/elements/forms/SearchSelect";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { TemplateResult, html, nothing } from "lit";

View File

@ -42,11 +42,10 @@ export class GoogleWorkspaceProviderFormPage extends BaseProviderForm<GoogleWork
id: this.instance.pk,
googleWorkspaceProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersGoogleWorkspaceCreate({
googleWorkspaceProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersGoogleWorkspaceCreate({
googleWorkspaceProviderRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -24,11 +24,10 @@ export class LDAPProviderFormPage extends WithBrandConfig(BaseProviderForm<LDAPP
id: this.instance.pk,
lDAPProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersLdapCreate({
lDAPProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersLdapCreate({
lDAPProviderRequest: data,
});
}
renderForm() {

View File

@ -40,11 +40,10 @@ export class MicrosoftEntraProviderFormPage extends BaseProviderForm<MicrosoftEn
id: this.instance.pk,
microsoftEntraProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersMicrosoftEntraCreate({
microsoftEntraProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersMicrosoftEntraCreate({
microsoftEntraProviderRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -82,11 +82,10 @@ export class OAuth2ProviderFormPage extends BaseProviderForm<OAuth2Provider> {
id: this.instance.pk,
oAuth2ProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersOauth2Create({
oAuth2ProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersOauth2Create({
oAuth2ProviderRequest: data,
});
}
renderForm() {

View File

@ -45,11 +45,10 @@ export class ProxyProviderFormPage extends BaseProviderForm<ProxyProvider> {
id: this.instance.pk,
proxyProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersProxyCreate({
proxyProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersProxyCreate({
proxyProviderRequest: data,
});
}
renderForm() {

View File

@ -60,6 +60,9 @@ export function ModeToLabel(action?: ProxyMode): string {
}
}
/**
* Predicate to determine if a given proxy mode should forward.
*/
export function isForward(mode: ProxyMode): boolean {
switch (mode) {
case ProxyMode.Proxy:
@ -156,13 +159,12 @@ export class ProxyProviderViewPage extends AKElement {
(input: string): string => {
// The generated config is pretty unreliable currently so
// put it behind a flag
if (!getURLParam("generatedConfig", false)) {
return input;
}
if (!this.provider) {
return input;
}
if (!getURLParam("generatedConfig", false)) return input;
if (!this.provider) return input;
const extHost = new URL(this.provider.externalHost);
// See website/docs/add-secure-apps/providers/proxy/forward_auth.mdx
if (this.provider?.mode === ProxyMode.ForwardSingle) {
return input
@ -170,13 +172,16 @@ export class ProxyProviderViewPage extends AKElement {
.replaceAll("outpost.company:9000", window.location.hostname)
.replaceAll("https://app.company", extHost.toString())
.replaceAll("app.company", extHost.hostname);
} else if (this.provider?.mode == ProxyMode.ForwardDomain) {
}
if (this.provider?.mode === ProxyMode.ForwardDomain) {
return input
.replaceAll("authentik.company", window.location.hostname)
.replaceAll("outpost.company:9000", extHost.toString())
.replaceAll("https://app.company", extHost.toString())
.replaceAll("app.company", extHost.hostname);
}
return input;
},
];

View File

@ -6,7 +6,7 @@ import "@goauthentik/elements/ak-dual-select/ak-dual-select-dynamic-selected-pro
import "@goauthentik/elements/forms/FormGroup";
import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { TemplateResult, html } from "lit";
@ -46,11 +46,10 @@ export class EndpointForm extends ModelForm<Endpoint, string> {
pbmUuid: this.instance.pk || "",
patchedEndpointRequest: data,
});
} else {
return new RacApi(DEFAULT_CONFIG).racEndpointsCreate({
endpointRequest: data,
});
}
return new RacApi(DEFAULT_CONFIG).racEndpointsCreate({
endpointRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -10,7 +10,7 @@ import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import "@goauthentik/elements/forms/Radio";
import "@goauthentik/elements/forms/SearchSelect";
import "@goauthentik/elements/utils/TimeDeltaHelp";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { TemplateResult, html } from "lit";
@ -32,9 +32,8 @@ export class RACProviderFormPage extends ModelForm<RACProvider, number> {
getSuccessMessage(): string {
if (this.instance) {
return msg("Successfully updated provider.");
} else {
return msg("Successfully created provider.");
}
return msg("Successfully created provider.");
}
async send(data: RACProvider): Promise<RACProvider> {
@ -43,11 +42,10 @@ export class RACProviderFormPage extends ModelForm<RACProvider, number> {
id: this.instance.pk,
rACProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersRacCreate({
rACProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersRacCreate({
rACProviderRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -22,11 +22,10 @@ export class RadiusProviderFormPage extends WithBrandConfig(BaseProviderForm<Rad
id: this.instance.pk,
radiusProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersRadiusCreate({
radiusProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersRadiusCreate({
radiusProviderRequest: data,
});
}
renderForm() {

View File

@ -17,7 +17,7 @@ export class SAMLProviderFormPage extends BaseProviderForm<SAMLProvider> {
const provider = await new ProvidersApi(DEFAULT_CONFIG).providersSamlRetrieve({
id: pk,
});
this.hasSigningKp = !!provider.signingKp;
this.hasSigningKp = Boolean(provider.signingKp);
return provider;
}
@ -27,18 +27,17 @@ export class SAMLProviderFormPage extends BaseProviderForm<SAMLProvider> {
id: this.instance.pk,
sAMLProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersSamlCreate({
sAMLProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersSamlCreate({
sAMLProviderRequest: data,
});
}
renderForm() {
const setHasSigningKp = (ev: InputEvent) => {
const target = ev.target as AkCryptoCertificateSearch;
if (!target) return;
this.hasSigningKp = !!target.selectedKeypair;
this.hasSigningKp = Boolean(target.selectedKeypair);
};
return renderForm(this.instance ?? {}, [], setHasSigningKp, this.hasSigningKp);

View File

@ -18,7 +18,7 @@ export class SAMLProviderImportForm extends Form<SAMLProvider> {
}
async send(data: SAMLProvider): Promise<void> {
const file = this.getFormFiles()["metadata"];
const file = this.getFormFiles().metadata;
if (!file) {
throw new SentryIgnoredError("No form data");
}

View File

@ -21,11 +21,10 @@ export class SCIMProviderFormPage extends BaseProviderForm<SCIMProvider> {
id: this.instance.pk,
sCIMProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersScimCreate({
sCIMProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersScimCreate({
sCIMProviderRequest: data,
});
}
renderForm() {

View File

@ -43,11 +43,10 @@ export class SSFProviderFormPage extends BaseProviderForm<SSFProvider> {
id: this.instance.pk,
sSFProviderRequest: data,
});
} else {
return new ProvidersApi(DEFAULT_CONFIG).providersSsfCreate({
sSFProviderRequest: data,
});
}
return new ProvidersApi(DEFAULT_CONFIG).providersSsfCreate({
sSFProviderRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -32,11 +32,10 @@ export class RoleForm extends ModelForm<Role, string> {
uuid: this.instance.pk,
patchedRoleRequest: data,
});
} else {
return new RbacApi(DEFAULT_CONFIG).rbacRolesCreate({
roleRequest: data,
});
}
return new RbacApi(DEFAULT_CONFIG).rbacRolesCreate({
roleRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -3,7 +3,10 @@ import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import { msg } from "@lit/localize";
export abstract class BaseSourceForm<T> extends ModelForm<T, string> {
getSuccessMessage(): string {
/**
* Success message to display after a successful form submission.
*/
public getSuccessMessage(): string {
return this.instance
? msg("Successfully updated source.")
: msg("Successfully created source.");

View File

@ -42,6 +42,7 @@ export class KerberosSourceForm extends WithCapabilitiesConfig(BaseSourceForm<Ke
const source = await new SourcesApi(DEFAULT_CONFIG).sourcesKerberosRetrieve({
slug: pk,
});
this.clearIcon = false;
return source;
}
@ -63,7 +64,7 @@ export class KerberosSourceForm extends WithCapabilitiesConfig(BaseSourceForm<Ke
}
const c = await config();
if (c.capabilities.includes(CapabilitiesEnum.CanSaveMedia)) {
const icon = this.getFormFiles()["icon"];
const icon = this.getFormFiles().icon;
if (icon || this.clearIcon) {
await new SourcesApi(DEFAULT_CONFIG).sourcesAllSetIconCreate({
slug: source.slug,

View File

@ -25,7 +25,7 @@ export function propertyMappingsSelector(object: string, instanceMappings?: stri
return async (mappings: DualSelectPair<KerberosSourcePropertyMapping>[]) =>
mappings.filter(
([_0, _1, _2, mapping]: DualSelectPair<KerberosSourcePropertyMapping>) =>
object == "user" &&
object === "user" &&
mapping?.managed?.startsWith("goauthentik.io/sources/kerberos/user/default/"),
);
}

View File

@ -73,7 +73,7 @@ export class OAuthSourceForm extends WithCapabilitiesConfig(BaseSourceForm<OAuth
}
const c = await config();
if (c.capabilities.includes(CapabilitiesEnum.CanSaveMedia)) {
const icon = this.getFormFiles()["icon"];
const icon = this.getFormFiles().icon;
if (icon || this.clearIcon) {
await new SourcesApi(DEFAULT_CONFIG).sourcesAllSetIconCreate({
slug: source.slug,

View File

@ -75,7 +75,7 @@ export class PlexSourceForm extends WithCapabilitiesConfig(BaseSourceForm<PlexSo
});
}
if (this.can(CapabilitiesEnum.CanSaveMedia)) {
const icon = this.getFormFiles()["icon"];
const icon = this.getFormFiles().icon;
if (icon || this.clearIcon) {
await new SourcesApi(DEFAULT_CONFIG).sourcesAllSetIconCreate({
slug: source.slug,
@ -160,7 +160,7 @@ export class PlexSourceForm extends WithCapabilitiesConfig(BaseSourceForm<PlexSo
${this.plexResources?.map((r) => {
const selected = Array.from(this.instance?.allowedServers || []).some(
(server) => {
return server == r.clientIdentifier;
return server === r.clientIdentifier;
},
);
return html`<option value=${r.clientIdentifier} ?selected=${selected}>

View File

@ -64,7 +64,7 @@ export class SAMLSourceForm extends WithCapabilitiesConfig(BaseSourceForm<SAMLSo
}
const c = await config();
if (c.capabilities.includes(CapabilitiesEnum.CanSaveMedia)) {
const icon = this.getFormFiles()["icon"];
const icon = this.getFormFiles().icon;
if (icon || this.clearIcon) {
await new SourcesApi(DEFAULT_CONFIG).sourcesAllSetIconCreate({
slug: source.slug,

View File

@ -33,11 +33,10 @@ export class SCIMSourceForm extends BaseSourceForm<SCIMSource> {
slug: this.instance.slug,
patchedSCIMSourceRequest: data,
});
} else {
return new SourcesApi(DEFAULT_CONFIG).sourcesScimCreate({
sCIMSourceRequest: data as unknown as SCIMSourceRequest,
});
}
return new SourcesApi(DEFAULT_CONFIG).sourcesScimCreate({
sCIMSourceRequest: data as unknown as SCIMSourceRequest,
});
}
renderForm(): TemplateResult {

View File

@ -34,11 +34,10 @@ export class AuthenticatorDuoStageForm extends BaseStageForm<AuthenticatorDuoSta
stageUuid: this.instance.pk || "",
patchedAuthenticatorDuoStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorDuoCreate({
authenticatorDuoStageRequest: data as unknown as AuthenticatorDuoStageRequest,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorDuoCreate({
authenticatorDuoStageRequest: data as unknown as AuthenticatorDuoStageRequest,
});
}
renderForm(): TemplateResult {

View File

@ -40,11 +40,10 @@ export class AuthenticatorEmailStageForm extends BaseStageForm<AuthenticatorEmai
stageUuid: this.instance.pk || "",
authenticatorEmailStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorEmailCreate({
authenticatorEmailStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorEmailCreate({
authenticatorEmailStageRequest: data,
});
}
renderConnectionSettings(): TemplateResult {

View File

@ -28,11 +28,10 @@ export class AuthenticatorEndpointGDTCStageForm extends BaseStageForm<Authentica
stageUuid: this.instance.pk || "",
patchedAuthenticatorEndpointGDTCStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorEndpointGdtcCreate({
authenticatorEndpointGDTCStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorEndpointGdtcCreate({
authenticatorEndpointGDTCStageRequest: data,
});
}
static get styles() {

View File

@ -51,11 +51,10 @@ export class AuthenticatorSMSStageForm extends BaseStageForm<AuthenticatorSMSSta
stageUuid: this.instance.pk || "",
authenticatorSMSStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorSmsCreate({
authenticatorSMSStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorSmsCreate({
authenticatorSMSStageRequest: data,
});
}
renderProviderTwillio(): TemplateResult {

View File

@ -32,11 +32,10 @@ export class AuthenticatorStaticStageForm extends BaseStageForm<AuthenticatorSta
stageUuid: this.instance.pk || "",
authenticatorStaticStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorStaticCreate({
authenticatorStaticStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorStaticCreate({
authenticatorStaticStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -34,11 +34,10 @@ export class AuthenticatorTOTPStageForm extends BaseStageForm<AuthenticatorTOTPS
stageUuid: this.instance.pk || "",
authenticatorTOTPStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorTotpCreate({
authenticatorTOTPStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorTotpCreate({
authenticatorTOTPStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -57,11 +57,10 @@ export class AuthenticatorValidateStageForm extends BaseStageForm<AuthenticatorV
stageUuid: this.instance.pk || "",
authenticatorValidateStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorValidateCreate({
authenticatorValidateStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorValidateCreate({
authenticatorValidateStageRequest: data,
});
}
isDeviceClassSelected(field: DeviceClassesEnum): boolean {

View File

@ -42,11 +42,10 @@ export class AuthenticatorWebAuthnStageForm extends BaseStageForm<AuthenticatorW
stageUuid: this.instance.pk || "",
authenticatorWebAuthnStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorWebauthnCreate({
authenticatorWebAuthnStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorWebauthnCreate({
authenticatorWebAuthnStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -27,11 +27,10 @@ export class CaptchaStageForm extends BaseStageForm<CaptchaStage> {
stageUuid: this.instance.pk || "",
patchedCaptchaStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesCaptchaCreate({
captchaStageRequest: data as unknown as CaptchaStageRequest,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesCaptchaCreate({
captchaStageRequest: data as unknown as CaptchaStageRequest,
});
}
renderForm(): TemplateResult {

View File

@ -33,11 +33,10 @@ export class ConsentStageForm extends BaseStageForm<ConsentStage> {
stageUuid: this.instance.pk || "",
consentStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesConsentCreate({
consentStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesConsentCreate({
consentStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -23,11 +23,10 @@ export class DenyStageForm extends BaseStageForm<DenyStage> {
stageUuid: this.instance.pk || "",
denyStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesDenyCreate({
denyStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesDenyCreate({
denyStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -24,11 +24,10 @@ export class DummyStageForm extends BaseStageForm<DummyStage> {
stageUuid: this.instance.pk || "",
dummyStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesDummyCreate({
dummyStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesDummyCreate({
dummyStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -37,11 +37,10 @@ export class EmailStageForm extends BaseStageForm<EmailStage> {
stageUuid: this.instance.pk || "",
patchedEmailStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesEmailCreate({
emailStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesEmailCreate({
emailStageRequest: data,
});
}
renderConnectionSettings(): TemplateResult {

View File

@ -6,7 +6,7 @@ import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror";
import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
import "@goauthentik/elements/forms/SearchSelect";
import YAML from "yaml";
import * as YAML from "yaml";
import { msg } from "@lit/localize";
import { TemplateResult, html } from "lit";
@ -34,11 +34,10 @@ export class InvitationForm extends ModelForm<Invitation, string> {
inviteUuid: this.instance.pk || "",
invitationRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesInvitationInvitationsCreate({
invitationRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesInvitationInvitationsCreate({
invitationRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -24,11 +24,10 @@ export class InvitationStageForm extends BaseStageForm<InvitationStage> {
stageUuid: this.instance.pk || "",
invitationStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesInvitationStagesCreate({
invitationStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesInvitationStagesCreate({
invitationStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -34,11 +34,10 @@ export class PasswordStageForm extends BaseStageForm<PasswordStage> {
stageUuid: this.instance.pk || "",
passwordStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesPasswordCreate({
passwordStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesPasswordCreate({
passwordStageRequest: data,
});
}
isBackendSelected(field: BackendsEnum): boolean {

View File

@ -56,11 +56,10 @@ export class PromptForm extends ModelForm<Prompt, string> {
promptUuid: this.instance.pk || "",
promptRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesPromptPromptsCreate({
promptRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesPromptPromptsCreate({
promptRequest: data,
});
}
async loadInstance(pk: string): Promise<Prompt> {
@ -73,10 +72,11 @@ export class PromptForm extends ModelForm<Prompt, string> {
async refreshPreview(prompt?: Prompt): Promise<void> {
if (!prompt) {
// TODO: Clarify this behavior.
prompt = this.serializeForm();
if (!prompt) {
return;
}
if (!prompt) return;
}
try {
this.preview = await new StagesApi(DEFAULT_CONFIG).stagesPromptPromptsPreviewCreate({

View File

@ -35,11 +35,10 @@ export class PromptStageForm extends BaseStageForm<PromptStage> {
stageUuid: this.instance.pk || "",
promptStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesPromptStagesCreate({
promptStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesPromptStagesCreate({
promptStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -38,11 +38,10 @@ export class RedirectStageForm extends BaseStageForm<RedirectStage> {
stageUuid: this.instance.pk || "",
redirectStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesRedirectCreate({
redirectStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesRedirectCreate({
redirectStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -31,11 +31,10 @@ export class SourceStageForm extends BaseStageForm<SourceStage> {
stageUuid: this.instance.pk || "",
sourceStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesSourceCreate({
sourceStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesSourceCreate({
sourceStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -23,11 +23,10 @@ export class UserDeleteStageForm extends BaseStageForm<UserDeleteStage> {
stageUuid: this.instance.pk || "",
userDeleteStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesUserDeleteCreate({
userDeleteStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesUserDeleteCreate({
userDeleteStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -26,11 +26,10 @@ export class UserLoginStageForm extends BaseStageForm<UserLoginStage> {
stageUuid: this.instance.pk || "",
userLoginStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesUserLoginCreate({
userLoginStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesUserLoginCreate({
userLoginStageRequest: data,
});
}
renderForm(): TemplateResult {

View File

@ -23,11 +23,10 @@ export class UserLogoutStageForm extends BaseStageForm<UserLogoutStage> {
stageUuid: this.instance.pk || "",
userLogoutStageRequest: data,
});
} else {
return new StagesApi(DEFAULT_CONFIG).stagesUserLogoutCreate({
userLogoutStageRequest: data,
});
}
return new StagesApi(DEFAULT_CONFIG).stagesUserLogoutCreate({
userLogoutStageRequest: data,
});
}
renderForm(): TemplateResult {

Some files were not shown because too many files have changed in this diff Show More