From 520d7d0f1bd3e821c49e6677b57ec2dde7582980 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Sat, 6 Dec 2025 16:45:36 +0100 Subject: [PATCH 1/4] web/admin: prevent file upload attempt when backend not managed Signed-off-by: Jens Langhammer --- web/src/admin/files/FileListPage.ts | 40 +++++++++++++++++++++++++---- web/src/elements/table/TablePage.ts | 2 ++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/web/src/admin/files/FileListPage.ts b/web/src/admin/files/FileListPage.ts index 5f2704a43ed2..4989bb5ec3ed 100644 --- a/web/src/admin/files/FileListPage.ts +++ b/web/src/admin/files/FileListPage.ts @@ -3,17 +3,20 @@ import "#elements/buttons/SpinnerButton/index"; import "#elements/forms/DeleteBulkForm"; import "#elements/forms/ModalForm"; import "@patternfly/elements/pf-tooltip/pf-tooltip.js"; +import "#elements/EmptyState"; import { DEFAULT_CONFIG } from "#common/api/config"; +import { docLink } from "#common/global"; +import { WithCapabilitiesConfig } from "#elements/mixins/capabilities"; import { PaginatedResponse, TableColumn } from "#elements/table/Table"; import { TablePage } from "#elements/table/TablePage"; import { SlottedTemplateResult } from "#elements/types"; -import { AdminApi, AdminFileListUsageEnum } from "@goauthentik/api"; +import { AdminApi, AdminFileListUsageEnum, CapabilitiesEnum } from "@goauthentik/api"; import { msg } from "@lit/localize"; -import { html, TemplateResult } from "lit"; +import { html, nothing, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators.js"; export interface FileItem { @@ -25,7 +28,7 @@ export interface FileItem { export type FileListOrderKey = "name" | "mimeType"; @customElement("ak-files-list") -export class FileListPage extends TablePage { +export class FileListPage extends WithCapabilitiesConfig(TablePage) { public override checkbox = true; public override clearOnRefresh = true; @@ -67,7 +70,10 @@ export class FileListPage extends TablePage { [msg("Actions"), null, msg("Row Actions")], ]; - renderToolbarSelected(): TemplateResult { + renderToolbarSelected() { + if (!this.can(CapabilitiesEnum.CanSaveMedia)) { + return nothing; + } const disabled = !this.selectedElements.length; const count = this.selectedElements.length; return html` { ]; } - protected renderObjectCreate(): TemplateResult { + protected renderEmpty(inner?: TemplateResult) { + if (!this.can(CapabilitiesEnum.CanSaveMedia)) { + return super.renderEmpty( + html`${msg("Configured file backend does not support file management.")} + + `, + ); + } + return super.renderEmpty(inner); + } + + protected renderObjectCreate() { + if (!this.can(CapabilitiesEnum.CanSaveMedia)) { + return nothing; + } return html` ${msg("Upload")} diff --git a/web/src/elements/table/TablePage.ts b/web/src/elements/table/TablePage.ts index 615048cc3eda..8b219d2696dd 100644 --- a/web/src/elements/table/TablePage.ts +++ b/web/src/elements/table/TablePage.ts @@ -1,3 +1,5 @@ +import "#elements/EmptyState"; + import { updateURLParams } from "#elements/router/RouteMatch"; import { Table } from "#elements/table/Table"; import { SlottedTemplateResult } from "#elements/types"; From 0f562b36b1d375b6109da2b399cd58174d861009 Mon Sep 17 00:00:00 2001 From: Dominic R Date: Sat, 6 Dec 2025 11:05:35 -0500 Subject: [PATCH 2/4] wip --- web/src/admin/files/FileListPage.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/web/src/admin/files/FileListPage.ts b/web/src/admin/files/FileListPage.ts index 4989bb5ec3ed..79a281985e84 100644 --- a/web/src/admin/files/FileListPage.ts +++ b/web/src/admin/files/FileListPage.ts @@ -129,6 +129,11 @@ export class FileListPage extends WithCapabilitiesConfig(TablePage) { >${msg("Configured file backend does not support file management.")} + ${msg( + "Please ensure the data folder is mounted or S3 storage is configured.", + )}
Date: Sat, 6 Dec 2025 11:22:16 -0500 Subject: [PATCH 3/4] fixup --- web/src/admin/files/FileListPage.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/src/admin/files/FileListPage.ts b/web/src/admin/files/FileListPage.ts index 79a281985e84..4192b12b428e 100644 --- a/web/src/admin/files/FileListPage.ts +++ b/web/src/admin/files/FileListPage.ts @@ -129,11 +129,11 @@ export class FileListPage extends WithCapabilitiesConfig(TablePage) { >${msg("Configured file backend does not support file management.")} - ${msg( +
+ ${msg( "Please ensure the data folder is mounted or S3 storage is configured.", - )} + )} +
Date: Mon, 8 Dec 2025 12:59:48 +0100 Subject: [PATCH 4/4] rework Signed-off-by: Jens Langhammer --- web/src/admin/files/FileListPage.ts | 42 ++++++++++++++--------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/web/src/admin/files/FileListPage.ts b/web/src/admin/files/FileListPage.ts index 4192b12b428e..75c80ad4a88b 100644 --- a/web/src/admin/files/FileListPage.ts +++ b/web/src/admin/files/FileListPage.ts @@ -123,29 +123,29 @@ export class FileListPage extends WithCapabilitiesConfig(TablePage) { } protected renderEmpty(inner?: TemplateResult) { - if (!this.can(CapabilitiesEnum.CanSaveMedia)) { - return super.renderEmpty( - html`${msg("Configured file backend does not support file management.")}${msg("Configured file backend does not support file management.")} +
+ ${msg( + "Please ensure the data folder is mounted or S3 storage is configured.", + )} +
+
+ ${msg("Learn more")} -
- ${msg( - "Please ensure the data folder is mounted or S3 storage is configured.", - )} -
- - `, +
+ `, ); - } - return super.renderEmpty(inner); } protected renderObjectCreate() {