- 背景与问题 :以前没有支持官方工具mysqlworkbench的xml导入,现在支持了

- 变更点:新增mysqlworkbench的xml文件导入,并当没有密码时,提示用户,而不是直接使用空密码进行直接连接,更友好
  - 影响范围:仅导入受到影响
  - 验证方式:点击导入,用mysqlworkbench的xml进行导入即可
This commit is contained in:
anyanfei
2026-04-14 18:50:40 +08:00
parent f78b132c7c
commit b6121fe1f8
12 changed files with 312 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
import type { ConnectionConfig, SavedConnection } from '../types';
export type ConnectionImportKind = 'app-managed-package' | 'encrypted-package' | 'legacy-json' | 'invalid';
export type ConnectionImportKind = 'app-managed-package' | 'encrypted-package' | 'legacy-json' | 'mysql-workbench-xml' | 'invalid';
export type ConnectionPackageDialogSnapshot = {
open: boolean;
mode: 'export' | 'import';
@@ -105,7 +105,15 @@ const parseConnectionImportRaw = (raw: unknown): unknown => {
}
};
const isMySQLWorkbenchXML = (raw: string): boolean => (
raw.includes('<data') && raw.includes('grt_format') && raw.includes('db.mgmt.Connection')
);
export const detectConnectionImportKind = (raw: unknown): ConnectionImportKind => {
if (typeof raw === 'string' && isMySQLWorkbenchXML(raw)) {
return 'mysql-workbench-xml';
}
const parsed = parseConnectionImportRaw(raw);
if (isConnectionPackageV2AppManagedEnvelope(parsed)) {

View File

@@ -25,7 +25,7 @@ describe('connectionModalPresentation', () => {
it('maps missing saved-connection errors to a secret-specific hint', () => {
expect(normalizeConnectionSecretErrorMessage('saved connection not found: conn-1')).toBe(
'未找到当前连接对应的已保存密文,请重新填写密码保存后再试',
'未找到当前连接对应的已保存密文,请编辑当前连接,并输入密码保存',
);
});
@@ -39,7 +39,7 @@ describe('connectionModalPresentation', () => {
reason: 'saved connection not found: conn-1',
fallback: '连接失败',
})).toEqual({
message: '测试失败: 未找到当前连接对应的已保存密文,请重新填写密码保存后再试',
message: '测试失败: 未找到当前连接对应的已保存密文,请编辑当前连接,并输入密码保存',
shouldToast: true,
});
});

View File

@@ -41,7 +41,7 @@ export const normalizeConnectionSecretErrorMessage = (
const lower = text.toLowerCase();
if (lower.includes('saved connection not found:')) {
return '未找到当前连接对应的已保存密文,请重新填写密码保存后再试';
return '未找到当前连接对应的已保存密文,请编辑当前连接,并输入密码保存';
}
if (lower.includes('secret store unavailable')) {
return '系统密文存储当前不可用,请检查系统钥匙串或凭据管理器后再试';