From 5afced95c8ad3d911ab09a2d85a8984cf5c483ef Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sat, 15 Feb 2020 11:43:35 +0100 Subject: [PATCH] fixup! Add postgres support --- docs/content/doc/setup/backups.md | 2 +- docs/content/doc/setup/config.md | 3 +++ pkg/config/config.go | 2 ++ pkg/db/db.go | 35 +++++++++++++++++-------------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/docs/content/doc/setup/backups.md b/docs/content/doc/setup/backups.md index 979f96e24..0dbf1cfbb 100644 --- a/docs/content/doc/setup/backups.md +++ b/docs/content/doc/setup/backups.md @@ -42,7 +42,7 @@ You might be prompted for the password of the database user. To restore it, simply pipe it back into the `psql` command: {{< highlight bash >}} -mysql -U -h < vikunja-backup.sql +psql -U -h < vikunja-backup.sql {{< /highlight >}} For more information, please visit the [relevant PostgreSQL documentation](https://www.postgresql.org/docs/12/backup-dump.html). diff --git a/docs/content/doc/setup/config.md b/docs/content/doc/setup/config.md index 99c15e5fa..18e8f59bc 100644 --- a/docs/content/doc/setup/config.md +++ b/docs/content/doc/setup/config.md @@ -91,6 +91,9 @@ database: maxidleconnections: 50 # The maximum lifetime of a single db connection in miliseconds. maxconnectionlifetime: 10000 + # Secure connection mode. Only used with postgres. + # (see https://pkg.go.dev/github.com/lib/pq?tab=doc#hdr-Connection_String_Parameters) + sslmode: disable cache: # If cache is enabled or not diff --git a/pkg/config/config.go b/pkg/config/config.go index db9dff9d2..c24d3a8a3 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -55,6 +55,7 @@ const ( DatabaseMaxOpenConnections Key = `database.maxopenconnections` DatabaseMaxIdleConnections Key = `database.maxidleconnections` DatabaseMaxConnectionLifetime Key = `database.maxconnectionlifetime` + DatabaseSslMode Key = `database.sslmode` CacheEnabled Key = `cache.enabled` CacheType Key = `cache.type` @@ -181,6 +182,7 @@ func InitDefaultConfig() { DatabaseMaxOpenConnections.setDefault(100) DatabaseMaxIdleConnections.setDefault(50) DatabaseMaxConnectionLifetime.setDefault(10000) + DatabaseSslMode.setDefault("disable") // Cacher CacheEnabled.setDefault(false) diff --git a/pkg/db/db.go b/pkg/db/db.go index 6910570bf..ea3ca4c11 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -120,26 +120,29 @@ func initMysqlEngine() (engine *xorm.Engine, err error) { return } -func postgresConnStrAppend(connStr *strings.Builder, name string, value string) { - if name != "" { - value = strings.ReplaceAll(value, "\\", "\\\\") - value = strings.ReplaceAll(value, "'", "\\'") - - if connStr.Len() > 0 { - connStr.WriteString(" ") - } - connStr.WriteString(fmt.Sprintf("%s='%s'", name, value)) - } -} - func initPostgresEngine() (engine *xorm.Engine, err error) { var connStr strings.Builder // https://pkg.go.dev/github.com/lib/pq?tab=doc#hdr-Connection_String_Parameters - postgresConnStrAppend(&connStr, "user", config.DatabaseUser.GetString()) - postgresConnStrAppend(&connStr, "password", config.DatabasePassword.GetString()) - postgresConnStrAppend(&connStr, "host", config.DatabaseHost.GetString()) - postgresConnStrAppend(&connStr, "dbname", config.DatabaseDatabase.GetString()) + params := map[string]string{ + "user": config.DatabaseUser.GetString(), + "password": config.DatabasePassword.GetString(), + "host": config.DatabaseHost.GetString(), + "dbname": config.DatabaseDatabase.GetString(), + "sslmode": config.DatabaseSslMode.GetString(), + } + + for name, value := range params { + if name != "" { + value = strings.ReplaceAll(value, "\\", "\\\\") + value = strings.ReplaceAll(value, "'", "\\'") + + if connStr.Len() > 0 { + connStr.WriteString(" ") + } + connStr.WriteString(fmt.Sprintf("%s='%s'", name, value)) + } + } engine, err = xorm.NewEngine("postgres", connStr.String()) if err != nil {