@@ -2,6 +2,7 @@ package cql
22
33import (
44 "fmt"
5+ "net/url"
56 "strconv"
67 "strings"
78 "time"
@@ -57,14 +58,30 @@ func ClusterConfigToConfigString(clusterConfig *gocql.ClusterConfig) string {
5758 passwordAuthenticator , ok := clusterConfig .Authenticator .(gocql.PasswordAuthenticator )
5859 if ok {
5960 if passwordAuthenticator .Username != "" {
60- stringConfig += "username=" + passwordAuthenticator .Username + "&"
61+ stringConfig += "username=" + url . QueryEscape ( passwordAuthenticator .Username ) + "&"
6162 }
6263 if passwordAuthenticator .Password != "" {
63- stringConfig += "password=" + passwordAuthenticator .Password + "&"
64+ stringConfig += "password=" + url . QueryEscape ( passwordAuthenticator .Password ) + "&"
6465 }
6566 }
6667 }
6768
69+ if sslOpts := clusterConfig .SslOpts ; sslOpts != nil {
70+ defaultSslOpts := gocql.SslOptions {}
71+ if s := strconv .FormatBool (sslOpts .EnableHostVerification ); sslOpts .EnableHostVerification != defaultSslOpts .EnableHostVerification {
72+ stringConfig += "enableHostVerification=" + s + "&"
73+ }
74+ if s := sslOpts .KeyPath ; sslOpts .KeyPath != defaultSslOpts .KeyPath {
75+ stringConfig += "keyPath=" + url .QueryEscape (s ) + "&"
76+ }
77+ if s := sslOpts .CertPath ; sslOpts .CertPath != defaultSslOpts .CertPath {
78+ stringConfig += "certPath=" + url .QueryEscape (s ) + "&"
79+ }
80+ if s := sslOpts .CaPath ; sslOpts .CaPath != defaultSslOpts .CaPath {
81+ stringConfig += "caPath=" + url .QueryEscape (s ) + "&"
82+ }
83+ }
84+
6885 return stringConfig [:len (stringConfig )- 1 ]
6986}
7087
@@ -84,6 +101,7 @@ func ConfigStringToClusterConfig(configString string) (*gocql.ClusterConfig, err
84101 }
85102
86103 passwordAuthenticator := gocql.PasswordAuthenticator {}
104+ sslOpts := gocql.SslOptions {}
87105
88106 if len (configStringSplit ) > 1 && len (configStringSplit [1 ]) > 1 {
89107 dataSplit := strings .Split (configStringSplit [1 ], "&" )
@@ -93,7 +111,7 @@ func ConfigStringToClusterConfig(configString string) (*gocql.ClusterConfig, err
93111 if len (settingSplit ) != 2 {
94112 return nil , fmt .Errorf ("missing =" )
95113 }
96- key , value := strings .TrimSpace (settingSplit [0 ]), strings . TrimSpace ( settingSplit [1 ])
114+ key , value := strings .TrimSpace (settingSplit [0 ]), settingSplit [1 ]
97115 switch key {
98116 case "consistency" :
99117 consistency , ok := DbConsistencyLevels [value ]
@@ -149,11 +167,47 @@ func ConfigStringToClusterConfig(configString string) (*gocql.ClusterConfig, err
149167 }
150168 clusterConfig .WriteCoalesceWaitTime = data
151169 case "username" :
152- passwordAuthenticator .Username = value
170+ data , err := url .QueryUnescape (value )
171+ if err != nil {
172+ return nil , fmt .Errorf ("failed for: %v = %v" , key , value )
173+ }
174+ passwordAuthenticator .Username = data
153175 clusterConfig .Authenticator = passwordAuthenticator
154176 case "password" :
155- passwordAuthenticator .Password = value
177+ data , err := url .QueryUnescape (value )
178+ if err != nil {
179+ return nil , fmt .Errorf ("failed for: %v = %v" , key , value )
180+ }
181+ passwordAuthenticator .Password = data
156182 clusterConfig .Authenticator = passwordAuthenticator
183+ case "enableHostVerification" :
184+ data , err := strconv .ParseBool (value )
185+ if err != nil {
186+ return nil , fmt .Errorf ("failed for: %v = %v" , key , value )
187+ }
188+ sslOpts .EnableHostVerification = data
189+ clusterConfig .SslOpts = & sslOpts
190+ case "certPath" :
191+ data , err := url .QueryUnescape (value )
192+ if err != nil {
193+ return nil , fmt .Errorf ("failed for: %v = %v" , key , value )
194+ }
195+ sslOpts .CertPath = data
196+ clusterConfig .SslOpts = & sslOpts
197+ case "keyPath" :
198+ data , err := url .QueryUnescape (value )
199+ if err != nil {
200+ return nil , fmt .Errorf ("failed for: %v = %v" , key , value )
201+ }
202+ sslOpts .KeyPath = data
203+ clusterConfig .SslOpts = & sslOpts
204+ case "caPath" :
205+ data , err := url .QueryUnescape (value )
206+ if err != nil {
207+ return nil , fmt .Errorf ("failed for: %v = %v" , key , value )
208+ }
209+ sslOpts .CaPath = data
210+ clusterConfig .SslOpts = & sslOpts
157211 default :
158212 return nil , fmt .Errorf ("invalid key: %v" , key )
159213 }
0 commit comments