mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-11 19:09:43 +08:00
* feat(mongodb-driver,connection-tree): 支持 MongoDB v1/v2 切换并新增复制连接 * fix(mongodb-query): 修复 MongoDB 筛选不生效并兼容 shell 语法执行 refs #153 * fix(query-editor): 修复 SQLServer 自动补全回车重复 dbo 前缀 refs #159 * fix(sqlserver-table-designer): 修复设计表读取列时错误使用 schema 作为数据库名 refs #156 * feat(shortcuts): 增加快捷键设置并支持 SQL 执行/侧边栏搜索 refs #158 * fix(sidebar-search): 优化范围搜索匹配与交互 refs #158 * fix(filter,connection-recovery): 保持筛选状态并修复连接失效卡死 refs #165 同步修复连接失效后侧栏持续转圈、断开后无法恢复的问题 * feat(table-designer): 统一设计表界面风格并优化字段新增交互 - 统一设计表页面与数据面板的视觉风格,覆盖工具栏、Tabs、表格与编辑区域 - 移除默认硬边框,改为透明背景与细分隔线,提升整体观感一致性 - 添加字段后自动滚动到新行并高亮,且自动聚焦输入框 - 新增" 在选中字段后添加\,支持按选中字段位置插入字段 * feat(data-grid-filter): 筛选字段支持快捷搜索 - 在筛选条件字段下拉启用可搜索(showSearch) - 支持字段名大小写不敏感模糊匹配 - 表字段较多时可快速定位目标字段,减少下拉查找耗时 refs #171 * fix(db-ssl): 支持多数据源 SSL/TLS 连接并补齐达梦证书配置 refs #167 * fix(sidebar): 修复数据库加载时 null.map 导致表加载失败 * fix(query-editor): 合并运行按钮并保留 SQL 停止执行入口
123 lines
3.0 KiB
Go
123 lines
3.0 KiB
Go
package db
|
||
|
||
import (
|
||
"crypto/tls"
|
||
"strings"
|
||
|
||
"GoNavi-Wails/internal/connection"
|
||
)
|
||
|
||
const (
|
||
sslModeDisable = "disable"
|
||
sslModePreferred = "preferred"
|
||
sslModeRequired = "required"
|
||
sslModeSkipVerify = "skip-verify"
|
||
)
|
||
|
||
func normalizeSSLModeValue(raw string) string {
|
||
mode := strings.ToLower(strings.TrimSpace(raw))
|
||
switch mode {
|
||
case "", sslModePreferred, "prefer":
|
||
return sslModePreferred
|
||
case sslModeRequired, "require", "on", "true", "mandatory", "strict":
|
||
return sslModeRequired
|
||
case sslModeSkipVerify, "insecure", "skipverify", "skip_verify", "insecure-skip-verify":
|
||
return sslModeSkipVerify
|
||
case sslModeDisable, "disabled", "off", "false", "none":
|
||
return sslModeDisable
|
||
default:
|
||
return sslModePreferred
|
||
}
|
||
}
|
||
|
||
func normalizedSSLMode(config connection.ConnectionConfig) string {
|
||
if !config.UseSSL {
|
||
return sslModeDisable
|
||
}
|
||
return normalizeSSLModeValue(config.SSLMode)
|
||
}
|
||
|
||
func shouldTrySSLPreferredFallback(config connection.ConnectionConfig) bool {
|
||
return config.UseSSL && normalizeSSLModeValue(config.SSLMode) == sslModePreferred
|
||
}
|
||
|
||
func withSSLDisabled(config connection.ConnectionConfig) connection.ConnectionConfig {
|
||
next := config
|
||
next.UseSSL = false
|
||
next.SSLMode = sslModeDisable
|
||
return next
|
||
}
|
||
|
||
func resolveMySQLTLSMode(config connection.ConnectionConfig) string {
|
||
switch normalizedSSLMode(config) {
|
||
case sslModeDisable:
|
||
return "false"
|
||
case sslModeRequired:
|
||
return "true"
|
||
case sslModeSkipVerify:
|
||
return "skip-verify"
|
||
default:
|
||
return "preferred"
|
||
}
|
||
}
|
||
|
||
func resolvePostgresSSLMode(config connection.ConnectionConfig) string {
|
||
switch normalizedSSLMode(config) {
|
||
case sslModeDisable:
|
||
return "disable"
|
||
case sslModeRequired:
|
||
return "require"
|
||
case sslModeSkipVerify:
|
||
return "require"
|
||
default:
|
||
return "require"
|
||
}
|
||
}
|
||
|
||
func resolveSQLServerTLSSettings(config connection.ConnectionConfig) (encrypt string, trustServerCertificate string) {
|
||
switch normalizedSSLMode(config) {
|
||
case sslModeDisable:
|
||
return "disable", "true"
|
||
case sslModeRequired:
|
||
return "true", "false"
|
||
case sslModeSkipVerify:
|
||
return "true", "true"
|
||
default:
|
||
return "false", "true"
|
||
}
|
||
}
|
||
|
||
func resolveGenericTLSConfig(config connection.ConnectionConfig) *tls.Config {
|
||
switch normalizedSSLMode(config) {
|
||
case sslModeDisable:
|
||
return nil
|
||
case sslModeRequired:
|
||
return &tls.Config{MinVersion: tls.VersionTLS12}
|
||
case sslModeSkipVerify:
|
||
return &tls.Config{MinVersion: tls.VersionTLS12, InsecureSkipVerify: true}
|
||
default:
|
||
// Preferred: 先尝试 TLS(为提升兼容性默认跳过证书校验),失败时由调用方按需回退明文。
|
||
return &tls.Config{MinVersion: tls.VersionTLS12, InsecureSkipVerify: true}
|
||
}
|
||
}
|
||
|
||
func resolveMongoTLSSettings(config connection.ConnectionConfig) (enabled bool, insecure bool) {
|
||
switch normalizedSSLMode(config) {
|
||
case sslModeDisable:
|
||
return false, false
|
||
case sslModeRequired:
|
||
return true, false
|
||
case sslModeSkipVerify:
|
||
return true, true
|
||
default:
|
||
return true, true
|
||
}
|
||
}
|
||
|
||
func resolveTDengineNet(config connection.ConnectionConfig) string {
|
||
if normalizedSSLMode(config) == sslModeDisable {
|
||
return "ws"
|
||
}
|
||
return "wss"
|
||
}
|