From 1629dcaef09ab7e12d800939c44414ee784a5512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92=E8=B5=AB=E8=90=9D?= Date: Sat, 19 Aug 2023 03:02:50 -0700 Subject: [PATCH] :construction: WIP: add sftp into manage page --- public/i18n/en.yml | 37 ++++++ public/i18n/zh-CN.yml | 38 ++++++ public/i18n/zh-TW.yml | 37 ++++++ src/main/manage/apis/sftp.ts | 0 src/renderer/manage/pages/logIn.vue | 30 ++++- src/renderer/manage/pages/manageMain.vue | 12 +- src/renderer/manage/utils/common.ts | 18 +-- src/renderer/manage/utils/constants.ts | 146 ++++++++++++++++++++++- src/universal/types/i18n.d.ts | 36 ++++++ 9 files changed, 333 insertions(+), 21 deletions(-) create mode 100644 src/main/manage/apis/sftp.ts diff --git a/public/i18n/en.yml b/public/i18n/en.yml index 440748c..c24dbb6 100644 --- a/public/i18n/en.yml +++ b/public/i18n/en.yml @@ -629,6 +629,43 @@ MANAGE_CONSTANT_LOCAL_BUCKET_DESC: Special Configuration MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: 'bucket1' MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration +MANAGE_CONSTANT_SFTP_NAME: SFTP +MANAGE_CONSTANT_SFTP_ALIAS_DESC: Alias - Required +MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: Unique identifier for this configuration +MANAGE_CONSTANT_SFTP_HOST_DESC: SSH Host - Required +MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: 'e.g. 233.233.233.233' +MANAGE_CONSTANT_SFTP_PORT_DESC: SSH Port - Required +MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: 'e.g. 22' +MANAGE_CONSTANT_SFTP_USERNAME_DESC: Username +MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: Please enter your username +MANAGE_CONSTANT_SFTP_PASSWORD_DESC: Password +MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: Please enter your password +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: Private Key +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: Please enter your private key +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_TOOLTIP: 'e.g. /home/user/.ssh/id_rsa' +MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: Private Key Password +MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: Please enter your private key password +MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: Base Directory +MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: 'e.g. /dir1' +MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: Custom Domain +MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: 'e.g. https://example.com' +MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: If your SFTP server supports custom domains, please fill in +MANAGE_CONSTANT_SFTP_WEB_PATH: Web Path +MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: 'e.g. test/ttc' +MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: 'Used to generate URL' +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: File mode +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: 'e.g. 0644' +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_TOOLTIP: 'Used to set the permissions of uploaded files' +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: Directory mode +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: 'e.g. 0755' +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_TOOLTIP: 'Used to set the permissions of uploaded directories' +MANAGE_CONSTANT_SFTP_EXPLAIN: 'SFTP Configuration' +MANAGE_CONSTANT_SFTP_REFER_TEXT: 'Refer to:' +MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: baseDir cannot be empty +MANAGE_CONSTANT_SFTP_BUCKET_DESC: Special Configuration +MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: 'e.g. bucket1' +MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration + MANAGE_LOGIN_PAGE_PANE_NAME: Saved Config MANAGE_LOGIN_PAGE_PANE_DESC: Click on the icon or alias to view details, Enter to view the file page, Delete to remove the configuration MANAGE_LOGIN_PAGE_PANE_LOADING: Importing... diff --git a/public/i18n/zh-CN.yml b/public/i18n/zh-CN.yml index 2ea741a..f286923 100644 --- a/public/i18n/zh-CN.yml +++ b/public/i18n/zh-CN.yml @@ -632,6 +632,44 @@ MANAGE_CONSTANT_LOCAL_BUCKET_DESC: 特殊配置 MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: '例如:bucket1' MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: 此处不可修改,仅为软件兼容性考虑 +MANAGE_CONSTANT_SFTP_NAME: SFTP +MANAGE_CONSTANT_SFTP_ALIAS_DESC: 配置别名-必需 +MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: 该配置的唯一标识 +MANAGE_CONSTANT_SFTP_HOST_DESC: SSH地址-必需 +MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: '例如:233.233.233.233' +MANAGE_CONSTANT_SFTP_PORT_DESC: SSH端口-必需 +MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: '例如:22' +MANAGE_CONSTANT_SFTP_USERNAME_DESC: 用户名 +MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: 请填写用户名 +MANAGE_CONSTANT_SFTP_PASSWORD_DESC: 密码 +MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: 请填写密码 +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: 私钥地址 +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: 请填写私钥地址 +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_TOOLTIP: '例如:/home/user/.ssh/id_rsa' +MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: 私钥密码 +MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: 请填写私钥密码 +MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: 起始目录-可选 +MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: '例如:/dir1' +MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: 自定义域名-可选 +MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: '例如:https://example.com' +MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: 如果您的对应路径支持域名访问,请填写 +MANAGE_CONSTANT_SFTP_WEB_PATH: 网址拼接用起始路径 +MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: '例如:test/ttc' +MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: '用于拼接网址' +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: 文件权限 +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: '例如:0644' +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_TOOLTIP: '用于设置上传文件的权限' +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: 目录权限 +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: '例如:0755' +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_TOOLTIP: '用于设置上传目录的权限' +MANAGE_CONSTANT_SFTP_EXPLAIN: 'SFTP配置' +MANAGE_CONSTANT_SFTP_REFER_TEXT: '配置教程请参考: ' +MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: 起始目录不能为空 +MANAGE_CONSTANT_SFTP_BUCKET_DESC: 特殊配置 +MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: '例如:bucket1' +MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此处不可修改,仅为软件兼容性考虑 + + MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置 MANAGE_LOGIN_PAGE_PANE_DESC: 点击图标和别名可查看详情,点击进入可查看文件页面,点击删除可删除配置 MANAGE_LOGIN_PAGE_PANE_LOADING: 导入配置... diff --git a/public/i18n/zh-TW.yml b/public/i18n/zh-TW.yml index 715524f..553151a 100644 --- a/public/i18n/zh-TW.yml +++ b/public/i18n/zh-TW.yml @@ -629,6 +629,43 @@ MANAGE_CONSTANT_LOCAL_BUCKET_DESC: 特殊配置 MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: '例如:bucket1' MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: 此處不可修改,僅為軟體相容性考量 +MANAGE_CONSTANT_SFTP_NAME: SFTP +MANAGE_CONSTANT_SFTP_ALIAS_DESC: 配置別名-必需 +MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: 該配置的唯一標識 +MANAGE_CONSTANT_SFTP_HOST_DESC: 地址-必需 +MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: '例如:233.233.233.233' +MANAGE_CONSTANT_SFTP_PORT_DESC: 端口-必需 +MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: '例如:22' +MANAGE_CONSTANT_SFTP_USERNAME_DESC: 用戶名 +MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: 請填寫用戶名 +MANAGE_CONSTANT_SFTP_PASSWORD_DESC: 密碼 +MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: 請填寫密碼 +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: 私鑰地址 +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: 請填寫私鑰地址 +MANAGE_CONSTANT_SFTP_PRIVATE_KEY_TOOLTIP: '例如:/home/user/.ssh/id_rsa' +MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: 私鑰密碼 +MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: 請填寫私鑰密碼 +MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: 起始目錄-可選 +MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: '例如:/dir1' +MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: 自定義網域-可選 +MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: '例如:https://example.com' +MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: 如果您的目錄支援自定義網域,請填寫 +MANAGE_CONSTANT_SFTP_WEB_PATH: 網路路徑-可選 +MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: '例如:test/ttc' +MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: '用於拼接網址' +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: 文件權限 +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: '例如:0644' +MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_TOOLTIP: '用於設置上傳文件的權限' +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: 目錄權限 +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: '例如:0755' +MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_TOOLTIP: '用於設置上傳目錄的權限' +MANAGE_CONSTANT_SFTP_EXPLAIN: 'SFTP配置' +MANAGE_CONSTANT_SFTP_REFER_TEXT: '配置教程請參考: ' +MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: 起始目錄不能為空 +MANAGE_CONSTANT_SFTP_BUCKET_DESC: 特殊配置 +MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: '例如:bucket1' +MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此處不可修改,僅為軟體相容性考量 + MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置 MANAGE_LOGIN_PAGE_PANE_DESC: 點擊圖標和別名可查看詳情,點擊進入可查看檔案頁面,點擊刪除可刪除配置 MANAGE_LOGIN_PAGE_PANE_LOADING: 導入配置... diff --git a/src/main/manage/apis/sftp.ts b/src/main/manage/apis/sftp.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/renderer/manage/pages/logIn.vue b/src/renderer/manage/pages/logIn.vue index 9423f1d..8e1e9ce 100644 --- a/src/renderer/manage/pages/logIn.vue +++ b/src/renderer/manage/pages/logIn.vue @@ -562,7 +562,7 @@ function handleConfigImport (alias: string) { async function getCurrentConfigList () { const configList = await getPicBedsConfig('uploader') ?? {} - const pbList = ['aliyun', 'aws-s3', 'github', 'imgur', 'local', 'qiniu', 'smms', 'tcyun', 'upyun', 'webdavplist'] + const pbList = ['aliyun', 'aws-s3', 'github', 'imgur', 'local', 'qiniu', 'sftpplist', 'smms', 'tcyun', 'upyun', 'webdavplist'] const filteredConfigList = pbList.flatMap((pb) => { const config = configList[pb] @@ -593,7 +593,13 @@ function initArray (arrayT: string | string[], defaultValue: string[]) { } async function transUpToManage (config: IUploaderConfigListItem, picBedName: string, autoImportPicBed: string[]) { - const alias = `${picBedName === 'webdavplist' ? 'webdav' : picBedName}-${config._configName ?? 'Default'}-imp` + const alias = `${picBedName === 'webdavplist' + ? 'webdav' + : picBedName === 'sftpplist' + ? 'sftp' + : picBedName === 'aws-s3' + ? 's3plist' + : picBedName}-${config._configName ?? 'Default'}-imp` if (!autoImportPicBed.includes(picBedName) || isImported(alias)) return const commonConfig = { alias, @@ -728,10 +734,30 @@ async function transUpToManage (config: IUploaderConfigListItem, picBedName: str }) delete resultMap.paging break + case 'sftpplist': + if (!config.host) return + Object.assign(resultMap, { + ...commonConfig, + picBedName: 'sftp', + host: config.host, + port: config.port || 22, + username: config.username, + password: config.password, + privateKey: config.privateKey, + passphrase: config.passphrase, + baseDir: config.uploadPath || '/', + webPath: config.webPath || '', + customUrl: config.customUrl || '', + fileMode: config.fileMode || '0664', + dirMode: config.dirMode || '0775' + }) + delete resultMap.paging + break case 'aws-s3': if (!config.accessKeyID || !config.secretAccessKey) return Object.assign(resultMap, { ...commonConfig, + picBedName: 's3plist', accessKeyId: config.accessKeyID, secretAccessKey: config.secretAccessKey, endpoint: config.endpoint || '', diff --git a/src/renderer/manage/pages/manageMain.vue b/src/renderer/manage/pages/manageMain.vue index 13bcd56..6b008ed 100644 --- a/src/renderer/manage/pages/manageMain.vue +++ b/src/renderer/manage/pages/manageMain.vue @@ -336,16 +336,17 @@ watch(route, async (newRoute) => { const getCurrentActiveBucket = computed(() => bucketNameList.value.length === 0 ? '' : bucketNameList.value[0]) const urlMap : IStringKeyMap = { - smms: 'https://smms.app', + aliyun: 'https://oss.console.aliyun.com', github: 'https://github.com', imgur: 'https://imgur.com', - aliyun: 'https://oss.console.aliyun.com', + local: 'https://piclist.cn', qiniu: 'https://portal.qiniu.com', + s3plist: 'https://aws.amazon.com/cn/s3/', + sftp: 'https://github.com/imba97/picgo-plugin-sftp-uploader', + smms: 'https://smms.app', tcyun: 'https://console.cloud.tencent.com/cos', upyun: 'https://console.upyun.com', - s3plist: 'https://aws.amazon.com/cn/s3/', - webdavplist: 'https://baike.baidu.com/item/WebDAV/4610909', - local: 'https://piclist.cn' + webdavplist: 'https://baike.baidu.com/item/WebDAV/4610909' } const showNewIconList = ['aliyun', 'qiniu', 'tcyun'] @@ -360,6 +361,7 @@ const menuTitleMap:IStringKeyMap = { tcyun: bucketT, upyun: bucketT, s3plist: bucketT, + sftp: '', smms: galleryT, imgur: galleryT, github: repositoryT, diff --git a/src/renderer/manage/utils/common.ts b/src/renderer/manage/utils/common.ts index 6e7ae79..1e50aa3 100644 --- a/src/renderer/manage/utils/common.ts +++ b/src/renderer/manage/utils/common.ts @@ -52,15 +52,17 @@ export function renameFileNameWithCustomString (oldName: string, customFormat: s }, customFormat) + ext } -export function renameFile (typeMap : IStringKeyMap, oldName: string): string { - if (typeMap.timestampRename) { - return renameFileNameWithTimestamp(oldName) - } else if (typeMap.randomStringRename) { - return renameFileNameWithRandomString(oldName, 20) - } else if (typeMap.customRename) { - return renameFileNameWithCustomString(oldName, typeMap.customRenameFormat) +export function renameFile ({ timestampRename, randomStringRename, customRename, customRenameFormat }: IStringKeyMap, oldName = ''): string { + switch (true) { + case timestampRename: + return renameFileNameWithTimestamp(oldName) + case randomStringRename: + return renameFileNameWithRandomString(oldName, 20) + case customRename: + return renameFileNameWithCustomString(oldName, customRenameFormat) + default: + return oldName } - return oldName } export async function formatLink (url: string, fileName: string, type: string, format?: string) : Promise { diff --git a/src/renderer/manage/utils/constants.ts b/src/renderer/manage/utils/constants.ts index fa06599..05261cd 100644 --- a/src/renderer/manage/utils/constants.ts +++ b/src/renderer/manage/utils/constants.ts @@ -22,7 +22,7 @@ const itemsPerPageRule = [ trigger: 'change' }, { - validator: (rule: any, value: any, callback: any) => { + validator: (_rule: any, value: any, callback: any) => { if (value < 20 || value > 1000) { callback(new Error($T('MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C'))) } else { @@ -40,7 +40,7 @@ const aliasRule = [ trigger: 'blur' }, { - validator: (rule: any, value: any, callback: any) => { + validator: (_rule: any, value: any, callback: any) => { const reg = /^[\u4e00-\u9fff_a-zA-Z0-9-]+$/ if (!reg.test(value)) { callback(new Error($T('MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B'))) @@ -469,7 +469,7 @@ export const supportedPicBedList: IStringKeyMap = { trigger: 'change' }, { - validator: (rule: any, value: any, callback: any) => { + validator: (_rule: any, value: any, callback: any) => { if (value) { const customUrlList = value.split(',') const customUrlValid = customUrlList.every((customUrl: string) => { @@ -722,7 +722,7 @@ export const supportedPicBedList: IStringKeyMap = { tooltip: $T('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP'), rule: [ { - validator: (rule: any, value: any, callback: any) => { + validator: (_rule: any, value: any, callback: any) => { if (value) { if (!/^https?:\/\/.+/.test(value)) { callback(new Error($T('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE'))) @@ -786,7 +786,7 @@ export const supportedPicBedList: IStringKeyMap = { default: '', rule: [ { - validator: (rule: any, value: any, callback: any) => { + validator: (_rule: any, value: any, callback: any) => { if (!value) { callback(new Error($T('MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE'))) } else { @@ -804,7 +804,7 @@ export const supportedPicBedList: IStringKeyMap = { tooltip: $T('MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP'), rule: [ { - validator: (rule: any, value: any, callback: any) => { + validator: (_rule: any, value: any, callback: any) => { if (value) { if (!/^https?:\/\/.+/.test(value)) { callback(new Error($T('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE'))) @@ -841,5 +841,139 @@ export const supportedPicBedList: IStringKeyMap = { options: ['alias', 'baseDir', 'customUrl', 'bucketName', 'webPath'], refLink: 'https://piclist.cn', referenceText: $T('MANAGE_CONSTANT_LOCAL_REFER_TEXT') + }, + sftp: { + name: $T('MANAGE_CONSTANT_SFTP_NAME'), + icon: 'sftp', + configOptions: { + alias: { + required: true, + description: $T('MANAGE_CONSTANT_SFTP_ALIAS_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER'), + type: 'string', + rule: aliasRule, + default: 'sftp-A', + tooltip: aliasTooltip + }, + host: { + required: true, + description: $T('MANAGE_CONSTANT_SFTP_HOST_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER'), + type: 'string', + rule: defaultBaseRule('host'), + default: '' + }, + port: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_PORT_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER'), + type: 'number', + default: 22 + }, + username: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_USERNAME_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER'), + type: 'string', + default: '' + }, + password: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_PASSWORD_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER'), + type: 'string', + default: '' + }, + privateKey: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER'), + type: 'string', + default: '' + }, + passphrase: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER'), + type: 'string', + default: '' + }, + fileMode: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER'), + type: 'string', + default: '0664' + }, + dirMode: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER'), + type: 'string', + default: '0755' + }, + baseDir: { + required: true, + description: $T('MANAGE_CONSTANT_SFTP_BASE_DIR_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER'), + type: 'string', + default: '', + rule: [ + { + validator: (_rule: any, value: any, callback: any) => { + if (!value) { + callback(new Error($T('MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE'))) + } else { + callback() + } + } + } + ] + }, + customUrl: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER'), + type: 'string', + tooltip: $T('MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP'), + rule: [ + { + validator: (_rule: any, value: any, callback: any) => { + if (value) { + if (!/^https?:\/\/.+/.test(value)) { + callback(new Error($T('MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE'))) + } else { + callback() + } + } else { + callback() + } + }, + trigger: 'change' + } + ] + }, + bucketName: { + required: true, + description: $T('MANAGE_CONSTANT_SFTP_BUCKET_DESC'), + placeholder: $T('MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER'), + type: 'string', + default: 'sftp', + disabled: true, + tooltip: $T('MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP') + }, + webPath: { + required: false, + description: $T('MANAGE_CONSTANT_SFTP_WEB_PATH'), + placeholder: $T('MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER'), + type: 'string', + tooltip: $T('MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP'), + default: '' + } + }, + explain: $T('MANAGE_CONSTANT_SFTP_EXPLAIN'), + options: ['alias', 'host', 'port', 'username', 'password', 'privateKey', 'passphrase', 'fileMode', 'dirMode', 'baseDir', 'customUrl', 'bucketName', 'webPath'], + refLink: 'https://github.com/imba97/picgo-plugin-sftp-uploader', + referenceText: $T('MANAGE_CONSTANT_SFTP_REFER_TEXT') } } diff --git a/src/universal/types/i18n.d.ts b/src/universal/types/i18n.d.ts index f454c92..3790b8b 100644 --- a/src/universal/types/i18n.d.ts +++ b/src/universal/types/i18n.d.ts @@ -589,6 +589,42 @@ interface ILocales { MANAGE_CONSTANT_LOCAL_BUCKET_DESC: string MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: string MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: string + MANAGE_CONSTANT_SFTP_NAME: string + MANAGE_CONSTANT_SFTP_ALIAS_DESC: string + MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_HOST_DESC: string + MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_PORT_DESC: string + MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_USERNAME_DESC: string + MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_PASSWORD_DESC: string + MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: string + MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_PRIVATE_KEY_TOOLTIP: string + MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: string + MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: string + MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: string + MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: string + MANAGE_CONSTANT_SFTP_WEB_PATH: string + MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: string + MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: string + MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_TOOLTIP: string + MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: string + MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_TOOLTIP: string + MANAGE_CONSTANT_SFTP_EXPLAIN: string + MANAGE_CONSTANT_SFTP_REFER_TEXT: string + MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: string + MANAGE_CONSTANT_SFTP_BUCKET_DESC: string + MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: string + MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: string MANAGE_LOGIN_PAGE_PANE_NAME: string MANAGE_LOGIN_PAGE_PANE_DESC: string MANAGE_LOGIN_PAGE_PANE_LOADING: string