Add resource navigation, workspace tabs, configurable tables, connection URL parameters and runtime connection options. Include feature documentation and regression coverage. Prior validation passed Go tests and vet, Vue type checks, and seven domain checks. Production frontend build and browser acceptance were blocked by spawn EPERM and remain documented as pending.
10 KiB
连接配置页签与 URL
目标的新建、编辑弹窗提供“连接信息、TLS/SSL、SSH 隧道/代理、高级、账号”页签。SSH/SFTP 使用自身的加密传输,不显示 TLS/SSL 页。页签切换保留未保存字段及尚未解析的 URL;保存和测试连接使用所有页签中的当前配置。网关仍使用“网关与访问、账号”分组。
- 连接信息:完整 URL 导入、独立 URL 参数、名称、颜色/备注、服务类型、主机、端口、数据库和集群配置。
- TLS/SSL:上游 TLS 与 CA 证书资产,开启时验证证书与主机名。
- SSH 隧道/代理:选择已维护的 SSH、SOCKS5、Kubernetes 出口或直接连接。出口凭据在代理管理维护。
- 高级:有实际运行支持的超时/保活、项目、环境、目标分组、MySQL/MongoDB 压缩,以及 SSH 主机指纹校验设置。
- 账号:既有多账号编辑及凭据资产。网关只读权限仍在网关配置中维护。
连接与网关的标识各自保存。目标连接选项由引用它的网关继承,包括账号独立目标映射;网关不能直接覆盖目标的 connectionOptions。
独立 URL 参数与提交一致性
完整 URL 下方提供独立“URL 参数”输入区,示例为 MySQL charset=utf8mb4&tls=true、PostgreSQL application_name=serviceport&sslmode=verify-full。参数区使用与完整 URL 一致的协议白名单,把值规范化到已有字段及 connectionOptions,不保存任意驱动参数字符串,也不透传未支持选项。
- 点击“应用参数”后同步表单;测试和保存也会先应用待处理输入。显式参数覆盖对应字段,缺省的数据库、TLS、认证来源、压缩或集群参数保持表单当前值;删除
charset/application_name则恢复协议默认值。参数应用后可继续在其他页签修改字段,回读文本由当前结构化字段生成。 - 重复参数(包含大小写变体)、冲突同义参数、非法编码和未支持项统一报错;解析失败不部分修改配置,不发送测试或保存请求。百分号编码用于特殊字符;允许的空值遵循协议语义,例如 MySQL
database=清除默认库、MongoDBcompressors=关闭压缩,charset=无效。 - 独立参数区拒绝
user/username/password;凭据只从完整 URL 导入或在账号页编辑。完整 URL 和参数区同时有待应用修改时,要求先手动应用其中一项并核对,避免两个输入源静默覆盖。 - 完整 URL 显示“待解析 / 已填入 / 解析错误”;测试/保存前自动解析仍未应用的 URL,不再使用旧主机或旧凭据。成功解析后清空原始 URL,关闭或切换工作区前仍有未保存确认。
- 切换协议清空协议相关参数及待处理输入,保留名称、范围、出口和颜色/备注。所有原始 URL、未处理参数和草稿只放内存,不写入浏览器偏好。
URL 支持范围
填写 URL 后可点击“解析并填入配置”,也可直接测试或保存,由统一提交准备流程解析。输入默认隐藏;只保存解析后的配置和按现有方式加密的凭据。部署模式手动选择,不提供自动识别模式;MongoDB 完整 URL 未包含 replicaSet 或 directConnection=true 时,需手动选择模式后再保存或测试。独立参数未修改集群项时保留原部署模式。
| 服务 | URL 示例 | 支持的查询参数 |
|---|---|---|
| MySQL | mysql://user:password@host:3306/app?charset=utf8mb4 |
database、tls、ssl、charset(utf8mb4 / utf8 / latin1 / ascii) |
| Redis | redis://:password@host:6379/3 或 rediss://user:password@host/0 |
database、db、tls、ssl |
| PostgreSQL | postgresql://user:password@host/app?sslmode=verify-full |
database、tls、ssl、sslmode、application_name(1–63 个 UTF-8 字节) |
| SQL Server | sqlserver://user:password@host?database=master&encrypt=true |
database、tls、ssl、encrypt |
| RabbitMQ | amqps://user:password@host/%2F |
vhost、tls、ssl |
| SSH/SFTP | ssh://user:password@host:22、sftp://user:password@host:22 |
无协议专用参数 |
| HTTP/HTTPS | https://user:password@host:443 |
无协议专用参数;只支持上游主机,不支持请求路径 |
| MongoDB | mongodb://user:password@host-a,host-b/app?replicaSet=rs0&authSource=admin |
见 数据库集群 |
除 MongoDB 沿用其专用解析器外,各协议还支持 user/username、password 查询参数。PostgreSQL 同时接受 postgres,SQL Server 同时接受 mssql。协议必须匹配当前服务类型;IPv6 使用方括号,特殊字符使用百分号编码。布尔值必须为 true 或 false。PostgreSQL sslmode 仅支持 disable 和 verify-full,其他模式无法准确映射到当前 TLS 校验行为。安全协议不可再指定关闭 TLS。
没有凭据时保留已有账号;包含凭据时更新选中的账号,多账号可明确选择写入对象。编辑已保存账号时,空密码沿用现有的“保留已存密码”规则;要更换密码请提供新密码。Redis 仅密码认证使用 default 用户名。导入 SSH 密码凭据会把选中账号切换为密码认证。非 MongoDB URL 按单节点配置导入;集群及其他节点可随后在表单中配置。
MySQL 的默认数据库用于测试连接和客户端未指定数据库的新连接;客户端指定数据库优先。Redis 在认证成功后发送 SELECT,服务端拒绝时连接失败,空值/0 保持默认库;Redis Cluster 仅支持 0。PostgreSQL、SQL Server 继续使用现有 authSource 字段保存默认库;RabbitMQ 的 vhost 用于连接测试,网关客户端仍自行指定 vhost。
MySQL charset 映射为上游握手的 utf8mb4_general_ci / utf8_general_ci / latin1_swedish_ci / ascii_general_ci;空设置沿用原来的 utf8mb4。PostgreSQL application_name 进入上游启动参数,缺省为 serviceport。客户端后续会话语句仍可能修改这些设置,它们不是权限策略。
高级选项能力矩阵
所有数值单位为秒,仅作用于当前目标;没有虚构的全局选项来源。没有实际支持的控件明确禁用,后端同样拒绝不适用于该协议的非默认值。
| 配置字段 | 支持范围 | 边界与实际语义 |
|---|---|---|
connectTimeoutSeconds |
全部目标协议及出口 | 0–120;0 沿用默认。设置直连、SOCKS5、SSH 转发及 K8s 建链上下文期限;默认普通拨号 5 秒、K8s 30 秒。MySQL/MongoDB 上游握手及 PostgreSQL 连接配置也使用此覆盖值;其他协议认证阶段保留原有限制。不是整个会话总时限,也不延长外层测试接口或调用方更短的期限。 |
queryTimeoutSeconds |
仅 PostgreSQL | 0–86400;非零作为新上游会话 statement_timeout(转换为毫秒)。0 不覆盖服务端默认。由 PostgreSQL 执行查询超时,客户端仍可调整;没有把原始套接字读超时冒充多协议查询超时。 |
idleTimeoutSeconds |
仅 MongoDB 网关会话 | 0–86400;0 关闭。在认证后等待下一条完整请求时设置下游读期限,收到请求后立即清除,不中断正在执行的查询。不是连接池回收,也不是目标测试的空闲设置。 |
keepAliveSeconds |
全部目标协议的直连 / SOCKS5 / SSH 底层 TCP | 缺省/null 使用 Go / 系统默认,0 禁用,1–3600 为覆盖值;“使用默认”会明确保存为 null,不保留之前的覆盖。Kubernetes port-forward 不支持,必须使用默认。不是数据库心跳、SSH 应用层探测或会话有效性保证。 |
旧配置省略 connectionOptions 时不改变连接行为。高级页清空数值恢复默认语义;改变协议会清空不兼容的参数。新值仅影响随后建立的连接,仍遵守修改目标前停止引用网关的规则。
连接标识与测试反馈
- 目标和网关各有
color(空或六位十六进制色)、remark(不含 NUL、最多 2000 个 UTF-8 字节;UI 限制为 600 个字符)及showRemark。提供预设色、自定义选色和清除;旧配置缺省为空且不显示备注。 - 名称旁显示颜色点,目标卡片、网关桌面/手机列表、资源树和最近访问按开关展示备注。搜索只显示名称及颜色,不检索备注;连接色不替代运行状态色。文件资产备注继续使用原有字段,不与目标/网关混用。备注不应填写凭据。
- 编辑器底部保留草稿测试账号选择和加载状态,完成后内联显示成功/失败、协议、TLS 和耗时;仍可打开完整结果。修改配置、账号或待处理 URL/参数后标记“需重新测试”。关闭编辑器后的迟到结果不会回填到其他编辑器。
- “复制脱敏诊断”仅包含协议、成功标志、耗时、TLS、是否过期及草稿范围;不复制名称、目标地址、账号、原始错误、服务器自由文本、URL、密码、私钥或资产正文。完整结果仍走原有弹窗,不写入偏好。
兼容和验证
沿用 MySQL/Redis 的 database,新增目标的可选 connectionOptions 及目标/网关的标识字段。通过已有加密配置、配置历史、备份/恢复和多端同步保存,无 SQLite 表结构迁移。网关运行快照继承关联目标选项,但网关记录只保存自身标识与目标引用,不复制上游配置;目标标识不会覆盖网关标识。
结构化 PATCH 仍拒绝未知字段与普通字段的 null;新增可空指针选项允许 keepAliveSeconds:null 恢复默认,其他字段的空值规则没有放开。使用新字段前应升级参与同步的所有客户端,旧版本不能保证保留其不认识的配置字段。
2026-09-20 实测:Go 1.25.0 全部后端测试及 vet 通过,前端全量类型检查通过,7 项前端纯逻辑测试函数在单进程执行通过。新增 fixture 验证 MySQL 握手字符集字节、PostgreSQL 启动参数、MongoDB 空闲关闭但不中断执行中请求;API 与 store 测试验证草稿、保存回读、清除保活、元数据隔离、加密备份恢复和同步快照替换。上述协议验证均为本地 fixture,不是实际数据库服务器验收。
已补充浏览器用例,但当前 Vite/esbuild 与 Playwright worker 均遇到 spawn EPERM,生产构建、全套浏览器执行和截图尚未完成,也没有使用旧二进制替代。完整结果见 变更原因 与 工作区交互。