From 5b9fb5828ca1be0ecbc8b5091dc0a31aa20000c8 Mon Sep 17 00:00:00 2001 From: wintbit Date: Sun, 15 Jun 2025 20:04:00 +0800 Subject: [PATCH] feat: file share custom password support --- public/locales/en-US/application.json | 2 ++ public/locales/ja-JP/application.json | 2 ++ public/locales/zh-CN/application.json | 2 ++ public/locales/zh-TW/application.json | 2 ++ src/api/explorer.ts | 1 + .../Dialogs/Share/ShareSetting.tsx | 25 ++++++++++++++++++- src/redux/thunks/share.ts | 1 + 7 files changed, 34 insertions(+), 1 deletion(-) diff --git a/public/locales/en-US/application.json b/public/locales/en-US/application.json index 695b370..801cb51 100644 --- a/public/locales/en-US/application.json +++ b/public/locales/en-US/application.json @@ -469,6 +469,8 @@ "createShareLink": "Create share link", "privateShare": "Hide from public", "privateShareDes": "If selected, other people cannot see this share link on your homepage.", + "passwordPrefix": "Share link password: ", + "passwordAutoGenerate": "Auto generate", "shareView": "Share view setting", "shareViewDes": "If selected, other users can see your view setting (layout, sorting, etc.) saved on the server server when accessing this shared folder.", "expireAfterDownload": "Expire after being downloaded", diff --git a/public/locales/ja-JP/application.json b/public/locales/ja-JP/application.json index d71e4b7..f598580 100644 --- a/public/locales/ja-JP/application.json +++ b/public/locales/ja-JP/application.json @@ -470,6 +470,8 @@ "createShareLink": "共有リンク作成", "privateShare": "共有を非表示", "privateShareDes": "チェックを入れると他の人はあなたのプロフィールページでこの共有リンクを見ることができません。", + "passwordPrefix": "共有リンクパスワード:", + "passwordAutoGenerate": "自動生成", "expireAfterDownload": "ダウンロード後に自動的に期限切れ", "sharePassword": "共有パスワード", "randomlyGenerate": "ランダム生成", diff --git a/public/locales/zh-CN/application.json b/public/locales/zh-CN/application.json index 02f379a..74a1534 100644 --- a/public/locales/zh-CN/application.json +++ b/public/locales/zh-CN/application.json @@ -469,6 +469,8 @@ "createShareLink": "创建分享链接", "privateShare": "隐藏分享", "privateShareDes": "勾选后,其他人无法在你的个人主页看到此分享链接。", + "passwordPrefix": "分享密码: ", + "passwordAutoGenerate": "自动生成", "expireAfterDownload": "下载后自动过期", "sharePassword": "分享密码", "randomlyGenerate": "随机生成", diff --git a/public/locales/zh-TW/application.json b/public/locales/zh-TW/application.json index 93631d1..92d4824 100644 --- a/public/locales/zh-TW/application.json +++ b/public/locales/zh-TW/application.json @@ -465,6 +465,8 @@ "createShareLink": "建立分享連結", "privateShare": "隱藏分享", "privateShareDes": "勾選後,其他人無法在你的個人主頁看到此分享連結。", + "passwordPrefix": "分享密碼:", + "passwordAutoGenerate": "自動生成", "expireAfterDownload": "下載後自動過期", "sharePassword": "分享密碼", "randomlyGenerate": "隨機生成", diff --git a/src/api/explorer.ts b/src/api/explorer.ts index ef6952a..7225470 100644 --- a/src/api/explorer.ts +++ b/src/api/explorer.ts @@ -275,6 +275,7 @@ export interface ShareCreateService { uri: string; downloads?: number; is_private?: boolean; + password?: string; expire?: number; share_view?: boolean; } diff --git a/src/component/FileManager/Dialogs/Share/ShareSetting.tsx b/src/component/FileManager/Dialogs/Share/ShareSetting.tsx index b95973a..5d84e99 100644 --- a/src/component/FileManager/Dialogs/Share/ShareSetting.tsx +++ b/src/component/FileManager/Dialogs/Share/ShareSetting.tsx @@ -1,5 +1,6 @@ import { Autocomplete, + Box, Checkbox, createFilterOptions, FormControl, @@ -70,6 +71,7 @@ const StyledListItemButton = styled(ListItemButton)(() => ({})); export interface ShareSetting { is_private?: boolean; + password?: string; share_view?: boolean; downloads?: boolean; expires?: boolean; @@ -150,7 +152,28 @@ const ShareSettingContent = ({ setting, file, editing, onSettingChange }: ShareS - {t("application:modals.privateShareDes")} + + {t("application:modals.privateShareDes")} + {setting.is_private && ( + + {t("application:modals.passwordPrefix")} + + { + onSettingChange({ ...setting, password: e.target.value }); + }} + placeholder={t("application:modals.passwordAutoGenerate")} + fullWidth + /> + + + )} + {file?.type == FileType.folder && ( diff --git a/src/redux/thunks/share.ts b/src/redux/thunks/share.ts index 003d0d2..3ed0b38 100644 --- a/src/redux/thunks/share.ts +++ b/src/redux/thunks/share.ts @@ -20,6 +20,7 @@ export function createOrUpdateShareLink( const req: ShareCreateService = { uri: file.path, is_private: setting.is_private, + password: setting.password, share_view: setting.share_view, downloads: setting.downloads && setting.downloads_val.value > 0 ? setting.downloads_val.value : undefined, expire: setting.expires && setting.expires_val.value > 0 ? setting.expires_val.value : undefined,