mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	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:
		 techknowlogick
					techknowlogick
				
			
				
					committed by
					
						 Lauris BH
						Lauris BH
					
				
			
			
				
	
			
			
			 Lauris BH
						Lauris BH
					
				
			
						parent
						
							a93f13849c
						
					
				
				
					commit
					d84da8fe65
				
			| @@ -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 New Issue
	
	Block a user