From 3c940cd81f2ac1da8408891f6ed0e24d15647005 Mon Sep 17 00:00:00 2001 From: Johannes Kirchner <124351955+johannes-kirchner@users.noreply.github.com> Date: Mon, 5 May 2025 00:29:13 +0200 Subject: [PATCH] feat: read psql sslmode from db uri (#462) --- internal/db/db.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/db/db.go b/internal/db/db.go index 454804c..a38cff3 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -39,6 +39,7 @@ type databaseInfo struct { User string Password string Database string + SSLMode string } var DatabaseInfo *databaseInfo @@ -46,6 +47,8 @@ var DatabaseInfo *databaseInfo func parseDBURI(uri string) (*databaseInfo, error) { info := &databaseInfo{} + info.SSLMode = "disable" + if uri == ":memory:" { info.Type = SQLite info.Database = uri @@ -85,6 +88,13 @@ func parseDBURI(uri string) (*databaseInfo, error) { info.Password, _ = u.User.Password() } + if u.RawQuery != "" { + q, _ := url.ParseQuery(u.RawQuery) + if sslmode := q.Get("sslmode"); sslmode != "" && info.Type == PostgreSQL { + info.SSLMode = sslmode + } + } + switch info.Type { case PostgreSQL, MySQL: info.Database = strings.TrimPrefix(u.Path, "/") @@ -222,7 +232,7 @@ func setupSQLite(dbInfo databaseInfo) error { func setupPostgres(dbInfo databaseInfo) error { var err error - dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", dbInfo.Host, dbInfo.Port, dbInfo.User, dbInfo.Password, dbInfo.Database) + dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s", dbInfo.Host, dbInfo.Port, dbInfo.User, dbInfo.Password, dbInfo.Database, dbInfo.SSLMode) db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent),