Change parsing of postgresql settings (#4275)
* Change parsing of postgresql settings Fix #4200 * Add copyright * update postgresql connection string * add tests
This commit is contained in:
parent
a93f13849c
commit
d84da8fe65
2 changed files with 54 additions and 8 deletions
|
@ -1,4 +1,5 @@
|
||||||
// Copyright 2014 The Gogs Authors. All rights reserved.
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a MIT-style
|
// Use of this source code is governed by a MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
@ -184,6 +185,18 @@ func parsePostgreSQLHostPort(info string) (string, string) {
|
||||||
return host, port
|
return host, port
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getPostgreSQLConnectionString(DBHost, DBUser, DBPasswd, DBName, DBParam, DBSSLMode string) (connStr string) {
|
||||||
|
host, port := parsePostgreSQLHostPort(DBHost)
|
||||||
|
if host[0] == '/' { // looks like a unix socket
|
||||||
|
connStr = fmt.Sprintf("postgres://%s:%s@:%s/%s%ssslmode=%s&host=%s",
|
||||||
|
url.PathEscape(DBUser), url.PathEscape(DBPasswd), port, DBName, DBParam, DBSSLMode, host)
|
||||||
|
} else {
|
||||||
|
connStr = fmt.Sprintf("postgres://%s:%s@%s:%s/%s%ssslmode=%s",
|
||||||
|
url.PathEscape(DBUser), url.PathEscape(DBPasswd), host, port, DBName, DBParam, DBSSLMode)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func parseMSSQLHostPort(info string) (string, string) {
|
func parseMSSQLHostPort(info string) (string, string) {
|
||||||
host, port := "127.0.0.1", "1433"
|
host, port := "127.0.0.1", "1433"
|
||||||
if strings.Contains(info, ":") {
|
if strings.Contains(info, ":") {
|
||||||
|
@ -214,14 +227,7 @@ func getEngine() (*xorm.Engine, error) {
|
||||||
DbCfg.User, DbCfg.Passwd, DbCfg.Host, DbCfg.Name, Param)
|
DbCfg.User, DbCfg.Passwd, DbCfg.Host, DbCfg.Name, Param)
|
||||||
}
|
}
|
||||||
case "postgres":
|
case "postgres":
|
||||||
host, port := parsePostgreSQLHostPort(DbCfg.Host)
|
connStr = getPostgreSQLConnectionString(DbCfg.Host, DbCfg.User, DbCfg.Passwd, DbCfg.Name, Param, DbCfg.SSLMode)
|
||||||
if host[0] == '/' { // looks like a unix socket
|
|
||||||
connStr = fmt.Sprintf("postgres://%s:%s@:%s/%s%ssslmode=%s&host=%s",
|
|
||||||
url.QueryEscape(DbCfg.User), url.QueryEscape(DbCfg.Passwd), port, DbCfg.Name, Param, DbCfg.SSLMode, host)
|
|
||||||
} else {
|
|
||||||
connStr = fmt.Sprintf("postgres://%s:%s@%s:%s/%s%ssslmode=%s",
|
|
||||||
url.QueryEscape(DbCfg.User), url.QueryEscape(DbCfg.Passwd), host, port, DbCfg.Name, Param, DbCfg.SSLMode)
|
|
||||||
}
|
|
||||||
case "mssql":
|
case "mssql":
|
||||||
host, port := parseMSSQLHostPort(DbCfg.Host)
|
host, port := parseMSSQLHostPort(DbCfg.Host)
|
||||||
connStr = fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", host, port, DbCfg.Name, DbCfg.User, DbCfg.Passwd)
|
connStr = fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", host, port, DbCfg.Name, DbCfg.User, DbCfg.Passwd)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// Copyright 2016 The Gogs Authors. All rights reserved.
|
// Copyright 2016 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a MIT-style
|
// Use of this source code is governed by a MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
@ -53,3 +54,42 @@ func Test_parsePostgreSQLHostPort(t *testing.T) {
|
||||||
assert.Equal(t, test.Port, port)
|
assert.Equal(t, test.Port, port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_getPostgreSQLConnectionString(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
Host string
|
||||||
|
Port string
|
||||||
|
User string
|
||||||
|
Passwd string
|
||||||
|
Name string
|
||||||
|
Param string
|
||||||
|
SSLMode string
|
||||||
|
Output string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Host: "/tmp/pg.sock",
|
||||||
|
Port: "4321",
|
||||||
|
User: "testuser",
|
||||||
|
Passwd: "space space !#$%^^%^```-=?=",
|
||||||
|
Name: "gitea",
|
||||||
|
Param: "",
|
||||||
|
SSLMode: "false",
|
||||||
|
Output: "postgres://testuser:space%20space%20%21%23$%25%5E%5E%25%5E%60%60%60-=%3F=@:5432/giteasslmode=false&host=/tmp/pg.sock",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Host: "localhost",
|
||||||
|
Port: "1234",
|
||||||
|
User: "pgsqlusername",
|
||||||
|
Passwd: "I love Gitea!",
|
||||||
|
Name: "gitea",
|
||||||
|
Param: "",
|
||||||
|
SSLMode: "true",
|
||||||
|
Output: "postgres://pgsqlusername:I%20love%20Gitea%21@localhost:5432/giteasslmode=true",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
connStr := getPostgreSQLConnectionString(test.Host, test.User, test.Passwd, test.Name, test.Param, test.SSLMode)
|
||||||
|
assert.Equal(t, test.Output, connStr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue