From 4fc37c64ab6fa2af4fb4b9292121b901ba206713 Mon Sep 17 00:00:00 2001 From: Howard Wu Date: Fri, 13 Mar 2026 13:24:08 +1300 Subject: [PATCH] feat: SSLMode option for Postgres driver and missing property in DiskConfig.Clone() --- db/db.go | 4 ++++ fs/fs.go | 1 + fs/fs_test.go | 5 +++++ go.mod | 6 ++++-- go.sum | 4 ++-- init.go | 6 ++++++ pkg/entdbadapter/common.go | 7 ++++++- 7 files changed, 28 insertions(+), 5 deletions(-) diff --git a/db/db.go b/db/db.go index e98f09c3..adf9286e 100644 --- a/db/db.go +++ b/db/db.go @@ -149,6 +149,9 @@ type Config struct { DisableForeignKeys bool `json:"disable_foreign_keys"` UseSoftDeletes bool `json:"use_soft_deletes"` Hooks func() *Hooks `json:"-"` + // SSLMode is only applicable for pgx (Postgres) driver. + // Valid values: disable, allow, prefer, require (verify-ca, verify-full not supported). Defaults to prefer. + SSLMode string `json:"ssl_mode"` } func (c *Config) Clone() *Config { @@ -164,6 +167,7 @@ func (c *Config) Clone() *Config { MigrationDir: c.MigrationDir, IgnoreMigration: c.IgnoreMigration, DisableForeignKeys: c.DisableForeignKeys, + SSLMode: c.SSLMode, Hooks: c.Hooks, } } diff --git a/fs/fs.go b/fs/fs.go index 009e6748..f8b1c58a 100644 --- a/fs/fs.go +++ b/fs/fs.go @@ -80,6 +80,7 @@ func (dc *DiskConfig) Clone() *DiskConfig { Name: dc.Name, Driver: dc.Driver, Root: dc.Root, + PublicPath: dc.PublicPath, BaseURL: dc.BaseURL, GetBaseURL: dc.GetBaseURL, Provider: dc.Provider, diff --git a/fs/fs_test.go b/fs/fs_test.go index 322b235e..1a81cba1 100644 --- a/fs/fs_test.go +++ b/fs/fs_test.go @@ -12,6 +12,7 @@ func TestDiskConfigClone(t *testing.T) { Name: "test", Driver: "test", Root: "test", + PublicPath: "test", BaseURL: "test", GetBaseURL: func() string { return "test" }, Provider: "test", @@ -28,6 +29,7 @@ func TestDiskConfigClone(t *testing.T) { assert.Equal(t, dc.Name, clone.Name) assert.Equal(t, dc.Driver, clone.Driver) assert.Equal(t, dc.Root, clone.Root) + assert.Equal(t, dc.PublicPath, clone.PublicPath) assert.Equal(t, dc.BaseURL, clone.BaseURL) assert.Equal(t, dc.GetBaseURL(), clone.GetBaseURL()) assert.Equal(t, dc.Provider, clone.Provider) @@ -55,6 +57,7 @@ func TestStorageConfigClone(t *testing.T) { Name: "test1", Driver: "test1", Root: "test1", + PublicPath: "test1", BaseURL: "test1", GetBaseURL: func() string { return "test1" }, Provider: "test1", @@ -69,6 +72,7 @@ func TestStorageConfigClone(t *testing.T) { Name: "test2", Driver: "test2", Root: "test2", + PublicPath: "test2", BaseURL: "test2", GetBaseURL: func() string { return "test2" }, Provider: "test2", @@ -90,6 +94,7 @@ func TestStorageConfigClone(t *testing.T) { assert.Equal(t, sc.Disks[i].Name, clone.Disks[i].Name) assert.Equal(t, sc.Disks[i].Driver, clone.Disks[i].Driver) assert.Equal(t, sc.Disks[i].Root, clone.Disks[i].Root) + assert.Equal(t, sc.Disks[i].PublicPath, clone.Disks[i].PublicPath) assert.Equal(t, sc.Disks[i].BaseURL, clone.Disks[i].BaseURL) assert.Equal(t, sc.Disks[i].GetBaseURL(), clone.Disks[i].GetBaseURL()) assert.Equal(t, sc.Disks[i].Provider, clone.Disks[i].Provider) diff --git a/go.mod b/go.mod index c67a1c3d..b6cfe3b9 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,11 @@ -module github.com/fastschema/fastschema +module github.com/GeoNet/fastschema go 1.24 toolchain go1.24.7 +replace github.com/fastschema/fastschema => ./ + require ( ariga.io/atlas v0.36.1 cloud.google.com/go/auth v0.16.2 @@ -15,6 +17,7 @@ require ( github.com/emersion/go-smtp v0.23.0 github.com/expr-lang/expr v1.17.5 github.com/fasthttp/websocket v1.5.12 + github.com/fastschema/fastschema v0.9.6 github.com/fastschema/qjs v0.0.6 github.com/fatih/color v1.18.0 github.com/go-sql-driver/mysql v1.9.3 @@ -117,7 +120,6 @@ require ( github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/mattn/go-sqlite3 v1.14.24 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect diff --git a/go.sum b/go.sum index 8ed2ea0a..29aae8a1 100644 --- a/go.sum +++ b/go.sum @@ -328,8 +328,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= -github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= diff --git a/init.go b/init.go index 9b567379..af07ba54 100644 --- a/init.go +++ b/init.go @@ -430,6 +430,7 @@ func (a *App) createDBClient() (err error) { LogQueries: utils.Env("DB_LOGGING", "false") == "true", DisableForeignKeys: utils.Env("DB_DISABLE_FOREIGN_KEYS", "false") == "true", UseSoftDeletes: utils.Env("DB_USE_SOFT_DELETES", "false") == "true", + SSLMode: utils.Env("DB_SSLMODE"), } } @@ -453,6 +454,11 @@ func (a *App) createDBClient() (err error) { a.config.DBConfig.MigrationDir = a.migrationDir } + pgxValidSSLModes := []string{"disable", "allow", "prefer", "require"} + if a.config.DBConfig.Driver == "pgx" && a.config.DBConfig.SSLMode != "" && !utils.Contains(pgxValidSSLModes, a.config.DBConfig.SSLMode) { + return fmt.Errorf("invalid ssl_mode %q: must be one of %v", a.config.DBConfig.SSLMode, pgxValidSSLModes) + } + // If driver is sqlite and the DB_NAME (file path) is not set, // Set the DB_NAME to the default sqlite db file path. if a.config.DBConfig.Driver == "sqlite" && a.config.DBConfig.Name == "" { diff --git a/pkg/entdbadapter/common.go b/pkg/entdbadapter/common.go index 7cf88cf6..23ea13e4 100644 --- a/pkg/entdbadapter/common.go +++ b/pkg/entdbadapter/common.go @@ -129,13 +129,18 @@ func CreateDBDSN(config *db.Config) string { } if config.Driver == "pgx" { + sslMode := config.SSLMode + if sslMode == "" { + sslMode = "prefer" + } dsn = fmt.Sprintf( - "host=%s port=%s user=%s dbname=%s password=%s sslmode=disable", + "host=%s port=%s user=%s dbname=%s password=%s sslmode=%s", config.Host, config.Port, config.User, config.Name, config.Pass, + sslMode, ) }