From dcf21d5eb9fbb635e81ab3c13b44e1233db5cac9 Mon Sep 17 00:00:00 2001 From: Aaron Liu Date: Fri, 12 Sep 2025 14:03:34 +0800 Subject: [PATCH] feat(webdav): option to disable system file uploads --- public/locales/en-US/application.json | 2 + public/locales/es-ES/application.json | 6 ++- public/locales/fr-FR/application.json | 2 + public/locales/it-IT/application.json | 2 + public/locales/ja-JP/application.json | 6 ++- public/locales/ko-KR/application.json | 6 ++- public/locales/pt-BR/application.json | 2 + public/locales/ru-RU/application.json | 6 ++- public/locales/zh-CN/application.json | 6 ++- public/locales/zh-TW/application.json | 6 ++- src/api/setting.ts | 2 + src/component/Admin/Common/ProDialog.tsx | 2 +- .../ViewerSetting/ImportWopiDialog.tsx | 2 +- .../Admin/Node/EditNode/BasicInfoSection.tsx | 2 +- .../Node/EditNode/CapabilitiesSection.tsx | 2 +- .../Admin/Node/NewNode/NewNodeDialog.tsx | 2 +- .../Settings/UserSession/UserSession.tsx | 2 +- .../FormSections/BasicInfoSection.tsx | 2 +- .../StoragePolicy/StoragePolicySetting.tsx | 2 +- .../StoragePolicy/Wizards/COS/CosWizard.tsx | 2 +- .../StoragePolicy/Wizards/KS3/KS3Wizard.tsx | 2 +- .../StoragePolicy/Wizards/OBS/ObsWizard.tsx | 2 +- .../StoragePolicy/Wizards/OSS/OssWizard.tsx | 2 +- .../Wizards/OneDrive/OneDriveAuthDialog.tsx | 2 +- .../Wizards/OneDrive/OneDriveWizard.tsx | 2 +- .../StoragePolicy/Wizards/S3/S3Wizard.tsx | 2 +- .../Wizards/Upyun/UpyunWizard.tsx | 2 +- src/component/{Admin => }/Common/Code.tsx | 0 .../Dialogs/Share/ShareSetting.tsx | 2 +- .../Pages/Devices/CreateDAVAccountDialog.tsx | 47 ++++++++++++++----- 30 files changed, 85 insertions(+), 42 deletions(-) rename src/component/{Admin => }/Common/Code.tsx (100%) diff --git a/public/locales/en-US/application.json b/public/locales/en-US/application.json index 1cf0598..7c7dc71 100644 --- a/public/locales/en-US/application.json +++ b/public/locales/en-US/application.json @@ -740,6 +740,8 @@ "connectionInfo": "Connection details", "proxyTooltip": "Proxy all file download requests.", "readonlyTooltip": "User can only read files through this account.", + "blockSysFilesUpload": "Block system files upload", + "blockSysFilesUploadTooltip": "When enabled, files starting with <0>. will be blocked from upload.", "rootFolderIn": "Select <0>", "createWebDavAccount": "Create WebDAV account", "editWebDavAccount": "Edit {{name}}", diff --git a/public/locales/es-ES/application.json b/public/locales/es-ES/application.json index e736412..d00eb6b 100644 --- a/public/locales/es-ES/application.json +++ b/public/locales/es-ES/application.json @@ -808,8 +808,10 @@ "shoeQr": "Mostrar", "deviceNothing": "El grupo de usuario actual no admite WebDAV", "connectionInfo": "Información de conexión", - "proxyTooltip": "El servidor proxy maneja todas las solicitudes de descarga de archivos", - "readonlyTooltip": "El usuario solo puede leer archivos a través de esta cuenta", + "proxyTooltip": "El servidor proxy maneja todas las solicitudes de descarga de archivos.", + "readonlyTooltip": "El usuario solo puede leer archivos a través de esta cuenta.", + "blockSysFilesUpload": "Bloquear carga de archivos del sistema", + "blockSysFilesUploadTooltip": "Cuando esté habilitado, los archivos que comiencen con <0>. serán bloqueados para la carga.", "rootFolderIn": "Seleccionar <0>", "createWebDavAccount": "Crear cuenta WebDAV", "editWebDavAccount": "Editar {{name}}", diff --git a/public/locales/fr-FR/application.json b/public/locales/fr-FR/application.json index c50d7c0..14ad43e 100644 --- a/public/locales/fr-FR/application.json +++ b/public/locales/fr-FR/application.json @@ -814,6 +814,8 @@ "connectionInfo": "Détails de connexion", "proxyTooltip": "Proxyfier toutes les demandes de téléchargement de fichiers.", "readonlyTooltip": "L'utilisateur ne peut que lire les fichiers via ce compte.", + "blockSysFilesUpload": "Bloquer le téléversement des fichiers système", + "blockSysFilesUploadTooltip": "Lorsqu'activé, les fichiers commençant par <0>. seront bloqués lors du téléversement.", "rootFolderIn": "Sélectionner <0>", "createWebDavAccount": "Créer un compte WebDAV", "editWebDavAccount": "Modifier {{name}}", diff --git a/public/locales/it-IT/application.json b/public/locales/it-IT/application.json index 303cc44..e1213dc 100644 --- a/public/locales/it-IT/application.json +++ b/public/locales/it-IT/application.json @@ -810,6 +810,8 @@ "connectionInfo": "Dettagli connessione", "proxyTooltip": "Proxy per tutte le richieste di download dei file.", "readonlyTooltip": "L'utente può solo leggere i file attraverso questo account.", + "blockSysFilesUpload": "Blocca caricamento file di sistema", + "blockSysFilesUploadTooltip": "Quando abilitato, i file che iniziano con <0>. verranno bloccati dal caricamento.", "rootFolderIn": "Seleziona <0>", "createWebDavAccount": "Crea account WebDAV", "editWebDavAccount": "Modifica {{name}}", diff --git a/public/locales/ja-JP/application.json b/public/locales/ja-JP/application.json index f8cc802..34f51e1 100644 --- a/public/locales/ja-JP/application.json +++ b/public/locales/ja-JP/application.json @@ -738,8 +738,10 @@ "shoeQr": "表示", "deviceNothing": "現在のユーザーグループはWebDAVをサポートしていません", "connectionInfo": "接続情報", - "proxyTooltip": "サーバーがすべてのファイルダウンロード要求をプロキシします", - "readonlyTooltip": "ユーザーはこのアカウントでのみファイルの読み取りが可能です", + "proxyTooltip": "サーバーがすべてのファイルダウンロード要求をプロキシします。", + "readonlyTooltip": "ユーザーはこのアカウントでのみファイルの読み取りが可能です。", + "blockSysFilesUpload": "システムファイルのアップロードをブロック", + "blockSysFilesUploadTooltip": "有効にすると、<0>. で始まるファイルのアップロードがブロックされます。", "rootFolderIn": "選択 <0>", "createWebDavAccount": "WebDAVアカウントの作成", "editWebDavAccount": "{{name}}の編集", diff --git a/public/locales/ko-KR/application.json b/public/locales/ko-KR/application.json index 206b5c2..9c0986c 100644 --- a/public/locales/ko-KR/application.json +++ b/public/locales/ko-KR/application.json @@ -812,8 +812,10 @@ "shoeQr": "표시", "deviceNothing": "현재 사용자 그룹은 WebDAV를 지원하지 않습니다", "connectionInfo": "연결 정보", - "proxyTooltip": "서버 측에서 모든 파일 다운로드 요청을 프록시", - "readonlyTooltip": "사용자는 이 계정을 통해서만 파일을 읽을 수 있습니다", + "proxyTooltip": "서버 측에서 모든 파일 다운로드 요청을 프록시。", + "readonlyTooltip": "사용자는 이 계정을 통해서만 파일을 읽을 수 있습니다。", + "blockSysFilesUpload": "시스템 파일 업로드 차단", + "blockSysFilesUploadTooltip": "활성화하면 <0>.로 시작하는 파일의 업로드가 차단됩니다。", "rootFolderIn": "<0> 선택", "createWebDavAccount": "WebDAV 계정 생성", "editWebDavAccount": "{{name}} 편집", diff --git a/public/locales/pt-BR/application.json b/public/locales/pt-BR/application.json index 9c8b863..a441719 100644 --- a/public/locales/pt-BR/application.json +++ b/public/locales/pt-BR/application.json @@ -814,6 +814,8 @@ "connectionInfo": "Detalhes de conexão", "proxyTooltip": "Fazer proxy de todas as solicitações de download de arquivo.", "readonlyTooltip": "Usuário pode apenas ler arquivos através desta conta.", + "blockSysFilesUpload": "Bloquear upload de arquivos do sistema", + "blockSysFilesUploadTooltip": "Quando habilitado, arquivos que começam com <0>. serão bloqueados para upload.", "rootFolderIn": "Selecionar <0>", "createWebDavAccount": "Criar conta WebDAV", "editWebDavAccount": "Editar {{name}}", diff --git a/public/locales/ru-RU/application.json b/public/locales/ru-RU/application.json index 087f806..126f8bb 100644 --- a/public/locales/ru-RU/application.json +++ b/public/locales/ru-RU/application.json @@ -812,8 +812,10 @@ "shoeQr": "Показать", "deviceNothing": "Текущая группа пользователей не поддерживает WebDAV", "connectionInfo": "Информация о подключении", - "proxyTooltip": "Проксировать все запросы на загрузку файлов через сервер", - "readonlyTooltip": "Пользователь может только читать файлы через этот аккаунт", + "proxyTooltip": "Проксировать все запросы на загрузку файлов через сервер.", + "readonlyTooltip": "Пользователь может только читать файлы через этот аккаунт.", + "blockSysFilesUpload": "Блокировать загрузку системных файлов", + "blockSysFilesUploadTooltip": "При включении файлы, начинающиеся с <0>., будут заблокированы для загрузки.", "rootFolderIn": "Выбрать <0>", "createWebDavAccount": "Создать аккаунт WebDAV", "editWebDavAccount": "Редактировать {{name}}", diff --git a/public/locales/zh-CN/application.json b/public/locales/zh-CN/application.json index 6d54248..462cda4 100644 --- a/public/locales/zh-CN/application.json +++ b/public/locales/zh-CN/application.json @@ -738,8 +738,10 @@ "shoeQr": "显示", "deviceNothing": "当前用户组不支持 WebDAV", "connectionInfo": "连接信息", - "proxyTooltip": "服务端代理所有文件下载请求", - "readonlyTooltip": "用户只能通过此账号读取文件", + "proxyTooltip": "服务端代理所有文件下载请求。", + "readonlyTooltip": "用户只能通过此账号读取文件。", + "blockSysFilesUpload": "阻止上传系统文件", + "blockSysFilesUploadTooltip": "开启后,以 <0>. 开头的文件会被阻止上传。", "rootFolderIn": "选择 <0>", "createWebDavAccount": "创建 WebDAV 账号", "editWebDavAccount": "编辑 {{name}}", diff --git a/public/locales/zh-TW/application.json b/public/locales/zh-TW/application.json index 4397360..3a10f15 100644 --- a/public/locales/zh-TW/application.json +++ b/public/locales/zh-TW/application.json @@ -738,8 +738,10 @@ "shoeQr": "顯示", "deviceNothing": "當前使用者組不支援 WebDAV", "connectionInfo": "連線資訊", - "proxyTooltip": "服務端代理所有檔案下載請求", - "readonlyTooltip": "使用者只能通過此賬號讀取檔案", + "proxyTooltip": "服務端代理所有檔案下載請求。", + "readonlyTooltip": "使用者只能通過此賬號讀取檔案。", + "blockSysFilesUpload": "阻止上傳系統檔案", + "blockSysFilesUploadTooltip": "開啟後,以 <0>. 開頭的檔案會被阻止上傳。", "rootFolderIn": "選擇 <0>", "createWebDavAccount": "建立 WebDAV 賬號", "editWebDavAccount": "編輯 {{name}}", diff --git a/src/api/setting.ts b/src/api/setting.ts index 2b71283..ee8928d 100644 --- a/src/api/setting.ts +++ b/src/api/setting.ts @@ -22,6 +22,7 @@ export interface ListDavAccountsResponse { export const DavAccountOption = { readonly: 0, proxy: 1, + disable_sys_files: 2, }; export interface CreateDavAccountService { @@ -29,4 +30,5 @@ export interface CreateDavAccountService { uri: string; readonly?: boolean; proxy?: boolean; + disable_sys_files?: boolean; } diff --git a/src/component/Admin/Common/ProDialog.tsx b/src/component/Admin/Common/ProDialog.tsx index aaebe0b..373e842 100644 --- a/src/component/Admin/Common/ProDialog.tsx +++ b/src/component/Admin/Common/ProDialog.tsx @@ -16,7 +16,7 @@ import { Trans, useTranslation } from "react-i18next"; import DraggableDialog, { StyledDialogActions } from "../../Dialogs/DraggableDialog"; import CheckmarkCircleFilled from "../../Icons/CheckmarkCircleFilled"; import Gift from "../../Icons/Gift"; -import { Code } from "./Code"; +import { Code } from "../../Common/Code.tsx"; export interface ProDialogProps { open: boolean; diff --git a/src/component/Admin/FileSystem/ViewerSetting/ImportWopiDialog.tsx b/src/component/Admin/FileSystem/ViewerSetting/ImportWopiDialog.tsx index cae8dd6..7701fa3 100644 --- a/src/component/Admin/FileSystem/ViewerSetting/ImportWopiDialog.tsx +++ b/src/component/Admin/FileSystem/ViewerSetting/ImportWopiDialog.tsx @@ -7,7 +7,7 @@ import { useAppDispatch } from "../../../../redux/hooks.ts"; import { DenseFilledTextField } from "../../../Common/StyledComponents.tsx"; import DraggableDialog from "../../../Dialogs/DraggableDialog.tsx"; import SettingForm from "../../../Pages/Setting/SettingForm.tsx"; -import { Code } from "../../Common/Code.tsx"; +import { Code } from "../../../Common/Code.tsx"; import { NoMarginHelperText } from "../../Settings/Settings.tsx"; export interface ImportWopiDialogProps { diff --git a/src/component/Admin/Node/EditNode/BasicInfoSection.tsx b/src/component/Admin/Node/EditNode/BasicInfoSection.tsx index 9a543ff..a343872 100644 --- a/src/component/Admin/Node/EditNode/BasicInfoSection.tsx +++ b/src/component/Admin/Node/EditNode/BasicInfoSection.tsx @@ -8,7 +8,7 @@ import { useAppDispatch } from "../../../../redux/hooks"; import { DefaultCloseAction } from "../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, SecondaryButton } from "../../../Common/StyledComponents"; import SettingForm from "../../../Pages/Setting/SettingForm"; -import { Code } from "../../Common/Code"; +import { Code } from "../../../Common/Code.tsx"; import { EndpointInput } from "../../Common/EndpointInput"; import { NoMarginHelperText, SettingSection, SettingSectionContent } from "../../Settings/Settings"; import { NodeSettingContext } from "./NodeSettingWrapper"; diff --git a/src/component/Admin/Node/EditNode/CapabilitiesSection.tsx b/src/component/Admin/Node/EditNode/CapabilitiesSection.tsx index b839f9b..261474c 100644 --- a/src/component/Admin/Node/EditNode/CapabilitiesSection.tsx +++ b/src/component/Admin/Node/EditNode/CapabilitiesSection.tsx @@ -24,7 +24,7 @@ import { DenseFilledTextField, DenseSelect, SecondaryButton } from "../../../Com import { SquareMenuItem } from "../../../FileManager/ContextMenu/ContextMenu"; import QuestionCircle from "../../../Icons/QuestionCircle"; import SettingForm from "../../../Pages/Setting/SettingForm"; -import { Code } from "../../Common/Code"; +import { Code } from "../../../Common/Code.tsx"; import { EndpointInput } from "../../Common/EndpointInput"; import { NoMarginHelperText, SettingSection, SettingSectionContent } from "../../Settings/Settings"; import { NodeSettingContext } from "./NodeSettingWrapper"; diff --git a/src/component/Admin/Node/NewNode/NewNodeDialog.tsx b/src/component/Admin/Node/NewNode/NewNodeDialog.tsx index 8e0de34..40d4018 100644 --- a/src/component/Admin/Node/NewNode/NewNodeDialog.tsx +++ b/src/component/Admin/Node/NewNode/NewNodeDialog.tsx @@ -13,7 +13,7 @@ import { DefaultCloseAction } from "../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, SecondaryButton } from "../../../Common/StyledComponents"; import DraggableDialog from "../../../Dialogs/DraggableDialog"; import SettingForm from "../../../Pages/Setting/SettingForm"; -import { Code } from "../../Common/Code"; +import { Code } from "../../../Common/Code.tsx"; import { EndpointInput } from "../../Common/EndpointInput"; import { NoMarginHelperText } from "../../Settings/Settings"; const MonacoEditor = lazy(() => import("../../../Viewers/CodeViewer/MonacoEditor")); diff --git a/src/component/Admin/Settings/UserSession/UserSession.tsx b/src/component/Admin/Settings/UserSession/UserSession.tsx index 41c7882..5a1b99d 100644 --- a/src/component/Admin/Settings/UserSession/UserSession.tsx +++ b/src/component/Admin/Settings/UserSession/UserSession.tsx @@ -7,7 +7,7 @@ import SizeInput from "../../../Common/SizeInput.tsx"; import { DenseFilledTextField, DenseSelect } from "../../../Common/StyledComponents.tsx"; import { SquareMenuItem } from "../../../FileManager/ContextMenu/ContextMenu.tsx"; import SettingForm, { ProChip } from "../../../Pages/Setting/SettingForm.tsx"; -import { Code } from "../../Common/Code.tsx"; +import { Code } from "../../../Common/Code.tsx"; import GroupSelectionInput from "../../Common/GroupSelectionInput.tsx"; import SharesInput from "../../Common/SharesInput.tsx"; import { NoMarginHelperText, SettingSection, SettingSectionContent } from "../Settings.tsx"; diff --git a/src/component/Admin/StoragePolicy/EditStoragePolicy/FormSections/BasicInfoSection.tsx b/src/component/Admin/StoragePolicy/EditStoragePolicy/FormSections/BasicInfoSection.tsx index 247e984..a63ea09 100644 --- a/src/component/Admin/StoragePolicy/EditStoragePolicy/FormSections/BasicInfoSection.tsx +++ b/src/component/Admin/StoragePolicy/EditStoragePolicy/FormSections/BasicInfoSection.tsx @@ -21,7 +21,7 @@ import { DefaultCloseAction } from "../../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, DenseSelect, SecondaryButton } from "../../../../Common/StyledComponents"; import { SquareMenuItem } from "../../../../FileManager/ContextMenu/ContextMenu"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { EndpointInput } from "../../../Common/EndpointInput"; import NodeSelectionInput from "../../../Common/NodeSelectionInput"; import { NoMarginHelperText, SettingSection, SettingSectionContent } from "../../../Settings/Settings"; diff --git a/src/component/Admin/StoragePolicy/StoragePolicySetting.tsx b/src/component/Admin/StoragePolicy/StoragePolicySetting.tsx index c052f2a..262d2d9 100644 --- a/src/component/Admin/StoragePolicy/StoragePolicySetting.tsx +++ b/src/component/Admin/StoragePolicy/StoragePolicySetting.tsx @@ -15,7 +15,7 @@ import ArrowSync from "../../Icons/ArrowSync"; import PageContainer from "../../Pages/PageContainer"; import PageHeader from "../../Pages/PageHeader"; import { BorderedCardClickable } from "../Common/AdminCard"; -import { Code } from "../Common/Code"; +import { Code } from "../../Common/Code.tsx"; import TablePagination from "../Common/TablePagination"; import AddWizardDialog, { AddWizardProps } from "./AddWizardDialog"; import SelectProvider from "./SelectProvider"; diff --git a/src/component/Admin/StoragePolicy/Wizards/COS/CosWizard.tsx b/src/component/Admin/StoragePolicy/Wizards/COS/CosWizard.tsx index 574bf00..8705a45 100644 --- a/src/component/Admin/StoragePolicy/Wizards/COS/CosWizard.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/COS/CosWizard.tsx @@ -9,7 +9,7 @@ import { useAppDispatch } from "../../../../../redux/hooks"; import { DefaultCloseAction } from "../../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, SecondaryButton } from "../../../../Common/StyledComponents"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { EndpointInput } from "../../../Common/EndpointInput"; import { NoMarginHelperText } from "../../../Settings/Settings"; import { AddWizardProps } from "../../AddWizardDialog"; diff --git a/src/component/Admin/StoragePolicy/Wizards/KS3/KS3Wizard.tsx b/src/component/Admin/StoragePolicy/Wizards/KS3/KS3Wizard.tsx index 1852867..23f8022 100644 --- a/src/component/Admin/StoragePolicy/Wizards/KS3/KS3Wizard.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/KS3/KS3Wizard.tsx @@ -9,7 +9,7 @@ import { useAppDispatch } from "../../../../../redux/hooks"; import { DefaultCloseAction } from "../../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, SecondaryButton } from "../../../../Common/StyledComponents"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { EndpointInput } from "../../../Common/EndpointInput"; import { NoMarginHelperText } from "../../../Settings/Settings"; import { AddWizardProps } from "../../AddWizardDialog"; diff --git a/src/component/Admin/StoragePolicy/Wizards/OBS/ObsWizard.tsx b/src/component/Admin/StoragePolicy/Wizards/OBS/ObsWizard.tsx index c1d5ea3..c334f14 100644 --- a/src/component/Admin/StoragePolicy/Wizards/OBS/ObsWizard.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/OBS/ObsWizard.tsx @@ -9,7 +9,7 @@ import { useAppDispatch } from "../../../../../redux/hooks"; import { DefaultCloseAction } from "../../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, SecondaryButton } from "../../../../Common/StyledComponents"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { EndpointInput } from "../../../Common/EndpointInput"; import { NoMarginHelperText } from "../../../Settings/Settings"; import { AddWizardProps } from "../../AddWizardDialog"; diff --git a/src/component/Admin/StoragePolicy/Wizards/OSS/OssWizard.tsx b/src/component/Admin/StoragePolicy/Wizards/OSS/OssWizard.tsx index d41891b..6d3797d 100644 --- a/src/component/Admin/StoragePolicy/Wizards/OSS/OssWizard.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/OSS/OssWizard.tsx @@ -9,7 +9,7 @@ import { useAppDispatch } from "../../../../../redux/hooks"; import { DefaultCloseAction } from "../../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, SecondaryButton } from "../../../../Common/StyledComponents"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { NoMarginHelperText } from "../../../Settings/Settings"; import { AddWizardProps } from "../../AddWizardDialog"; import BucketACLInput from "../../EditStoragePolicy/BucketACLInput"; diff --git a/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveAuthDialog.tsx b/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveAuthDialog.tsx index 94670f6..f8a0de0 100644 --- a/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveAuthDialog.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveAuthDialog.tsx @@ -5,7 +5,7 @@ import { getPolicyOauthRedirectUrl } from "../../../../../api/api"; import { useAppDispatch } from "../../../../../redux/hooks"; import { DenseFilledTextField } from "../../../../Common/StyledComponents"; import DraggableDialog from "../../../../Dialogs/DraggableDialog"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { NoMarginHelperText } from "../../../Settings/Settings"; interface OneDriveAuthDialogProps { diff --git a/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveWizard.tsx b/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveWizard.tsx index 73963cd..5ad304e 100644 --- a/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveWizard.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/OneDrive/OneDriveWizard.tsx @@ -7,7 +7,7 @@ import { PolicyType } from "../../../../../api/explorer"; import { useAppDispatch } from "../../../../../redux/hooks"; import { DenseFilledTextField } from "../../../../Common/StyledComponents"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { NoMarginHelperText } from "../../../Settings/Settings"; import { AddWizardProps } from "../../AddWizardDialog"; import GraphEndpointSelection from "./GraphEndpointSelection"; diff --git a/src/component/Admin/StoragePolicy/Wizards/S3/S3Wizard.tsx b/src/component/Admin/StoragePolicy/Wizards/S3/S3Wizard.tsx index 391ba7d..416f4de 100644 --- a/src/component/Admin/StoragePolicy/Wizards/S3/S3Wizard.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/S3/S3Wizard.tsx @@ -9,7 +9,7 @@ import { useAppDispatch } from "../../../../../redux/hooks"; import { DefaultCloseAction } from "../../../../Common/Snackbar/snackbar"; import { DenseFilledTextField, SecondaryButton } from "../../../../Common/StyledComponents"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { EndpointInput } from "../../../Common/EndpointInput"; import { NoMarginHelperText } from "../../../Settings/Settings"; import { AddWizardProps } from "../../AddWizardDialog"; diff --git a/src/component/Admin/StoragePolicy/Wizards/Upyun/UpyunWizard.tsx b/src/component/Admin/StoragePolicy/Wizards/Upyun/UpyunWizard.tsx index bfd6f8a..49fe751 100644 --- a/src/component/Admin/StoragePolicy/Wizards/Upyun/UpyunWizard.tsx +++ b/src/component/Admin/StoragePolicy/Wizards/Upyun/UpyunWizard.tsx @@ -7,7 +7,7 @@ import { PolicyType } from "../../../../../api/explorer"; import { useAppDispatch } from "../../../../../redux/hooks"; import { DenseFilledTextField } from "../../../../Common/StyledComponents"; import SettingForm from "../../../../Pages/Setting/SettingForm"; -import { Code } from "../../../Common/Code"; +import { Code } from "../../../../Common/Code.tsx"; import { EndpointInput } from "../../../Common/EndpointInput"; import { NoMarginHelperText } from "../../../Settings/Settings"; import { AddWizardProps } from "../../AddWizardDialog"; diff --git a/src/component/Admin/Common/Code.tsx b/src/component/Common/Code.tsx similarity index 100% rename from src/component/Admin/Common/Code.tsx rename to src/component/Common/Code.tsx diff --git a/src/component/FileManager/Dialogs/Share/ShareSetting.tsx b/src/component/FileManager/Dialogs/Share/ShareSetting.tsx index 26953af..2ac9526 100644 --- a/src/component/FileManager/Dialogs/Share/ShareSetting.tsx +++ b/src/component/FileManager/Dialogs/Share/ShareSetting.tsx @@ -20,7 +20,7 @@ import MuiAccordionSummary from "@mui/material/AccordionSummary"; import { useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { FileResponse, FileType } from "../../../../api/explorer.ts"; -import { Code } from "../../../Admin/Common/Code.tsx"; +import { Code } from "../../../Common/Code.tsx"; import { FilledTextField, SmallFormControlLabel } from "../../../Common/StyledComponents.tsx"; import BookInformation from "../../../Icons/BookInformation.tsx"; import ClockArrowDownload from "../../../Icons/ClockArrowDownload.tsx"; diff --git a/src/component/Pages/Devices/CreateDAVAccountDialog.tsx b/src/component/Pages/Devices/CreateDAVAccountDialog.tsx index 67c1337..8341bad 100644 --- a/src/component/Pages/Devices/CreateDAVAccountDialog.tsx +++ b/src/component/Pages/Devices/CreateDAVAccountDialog.tsx @@ -1,21 +1,22 @@ -import { useTranslation } from "react-i18next"; import { Checkbox, DialogContent, DialogProps, FormGroup, Stack, Typography, useTheme } from "@mui/material"; -import { useAppDispatch } from "../../../redux/hooks.ts"; -import DraggableDialog from "../../Dialogs/DraggableDialog.tsx"; import { useSnackbar } from "notistack"; import { useEffect, useMemo, useState } from "react"; -import { PathSelectorForm } from "../../Common/Form/PathSelectorForm.tsx"; -import { defaultPath } from "../../../hooks/useNavigation.tsx"; -import { Filesystem } from "../../../util/uri.ts"; -import { OutlineIconTextField } from "../../Common/Form/OutlineIconTextField.tsx"; -import Tag from "../../Icons/Tag.tsx"; -import DialogAccordion from "../../Dialogs/DialogAccordion.tsx"; -import Boolset from "../../../util/boolset.ts"; -import { GroupPermission } from "../../../api/user.ts"; -import SessionManager from "../../../session"; -import { SmallFormControlLabel } from "../../Common/StyledComponents.tsx"; +import { Trans, useTranslation } from "react-i18next"; import { sendCreateDavAccounts, sendUpdateDavAccounts } from "../../../api/api.ts"; import { DavAccount, DavAccountOption } from "../../../api/setting.ts"; +import { GroupPermission } from "../../../api/user.ts"; +import { defaultPath } from "../../../hooks/useNavigation.tsx"; +import { useAppDispatch } from "../../../redux/hooks.ts"; +import SessionManager from "../../../session"; +import Boolset from "../../../util/boolset.ts"; +import { Filesystem } from "../../../util/uri.ts"; +import { Code } from "../../Common/Code.tsx"; +import { OutlineIconTextField } from "../../Common/Form/OutlineIconTextField.tsx"; +import { PathSelectorForm } from "../../Common/Form/PathSelectorForm.tsx"; +import { SmallFormControlLabel } from "../../Common/StyledComponents.tsx"; +import DialogAccordion from "../../Dialogs/DialogAccordion.tsx"; +import DraggableDialog from "../../Dialogs/DraggableDialog.tsx"; +import Tag from "../../Icons/Tag.tsx"; export interface CreateDAVAccountDialogProps extends DialogProps { onAccountAdded?: (account: DavAccount) => void; @@ -39,6 +40,7 @@ const CreateDAVAccountDialog = ({ const [name, setName] = useState(""); const [path, setPath] = useState(defaultPath); const [readonly, setReadonly] = useState(false); + const [blockSysFilesUpload, setBlockSysFilesUpload] = useState(false); const [proxy, setProxy] = useState(false); const theme = useTheme(); @@ -54,6 +56,7 @@ const CreateDAVAccountDialog = ({ setPath(editTarget.uri); const options = new Boolset(editTarget.options); setReadonly(options.enabled(DavAccountOption.readonly)); + setBlockSysFilesUpload(options.enabled(DavAccountOption.disable_sys_files)); setProxy(options.enabled(DavAccountOption.proxy)); } }, [open]); @@ -69,6 +72,7 @@ const CreateDAVAccountDialog = ({ uri: path, proxy, readonly, + disable_sys_files: blockSysFilesUpload, }; dispatch(editTarget ? sendUpdateDavAccounts(editTarget.id, req) : sendCreateDavAccounts(req)) .then((account) => { @@ -135,6 +139,23 @@ const CreateDAVAccountDialog = ({ {t("application:setting.readonlyTooltip")} + setBlockSysFilesUpload(e.target.checked)} + checked={blockSysFilesUpload} + /> + } + label={t("application:setting.blockSysFilesUpload")} + /> + + ]} + /> + {groupProxyEnabled && ( <>