feat: read psql sslmode from db uri (#462)

This commit is contained in:
Johannes Kirchner
2025-05-05 00:29:13 +02:00
committed by GitHub
parent de144d09d3
commit 3c940cd81f

View File

@ -39,6 +39,7 @@ type databaseInfo struct {
User string User string
Password string Password string
Database string Database string
SSLMode string
} }
var DatabaseInfo *databaseInfo var DatabaseInfo *databaseInfo
@ -46,6 +47,8 @@ var DatabaseInfo *databaseInfo
func parseDBURI(uri string) (*databaseInfo, error) { func parseDBURI(uri string) (*databaseInfo, error) {
info := &databaseInfo{} info := &databaseInfo{}
info.SSLMode = "disable"
if uri == ":memory:" { if uri == ":memory:" {
info.Type = SQLite info.Type = SQLite
info.Database = uri info.Database = uri
@ -85,6 +88,13 @@ func parseDBURI(uri string) (*databaseInfo, error) {
info.Password, _ = u.User.Password() 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 { switch info.Type {
case PostgreSQL, MySQL: case PostgreSQL, MySQL:
info.Database = strings.TrimPrefix(u.Path, "/") info.Database = strings.TrimPrefix(u.Path, "/")
@ -222,7 +232,7 @@ func setupSQLite(dbInfo databaseInfo) error {
func setupPostgres(dbInfo databaseInfo) error { func setupPostgres(dbInfo databaseInfo) error {
var err 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{ db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent), Logger: logger.Default.LogMode(logger.Silent),