46 lines
1002 B
Go
46 lines
1002 B
Go
|
package clickhouse
|
||
|
|
||
|
import (
|
||
|
"crypto/tls"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
// Based on the original implementation in the project go-sql-driver/mysql:
|
||
|
// https://github.com/go-sql-driver/mysql/blob/master/utils.go
|
||
|
|
||
|
var (
|
||
|
tlsConfigLock sync.RWMutex
|
||
|
tlsConfigRegistry map[string]*tls.Config
|
||
|
)
|
||
|
|
||
|
// RegisterTLSConfig registers a custom tls.Config to be used with sql.Open.
|
||
|
func RegisterTLSConfig(key string, config *tls.Config) error {
|
||
|
tlsConfigLock.Lock()
|
||
|
if tlsConfigRegistry == nil {
|
||
|
tlsConfigRegistry = make(map[string]*tls.Config)
|
||
|
}
|
||
|
|
||
|
tlsConfigRegistry[key] = config
|
||
|
tlsConfigLock.Unlock()
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// DeregisterTLSConfig removes the tls.Config associated with key.
|
||
|
func DeregisterTLSConfig(key string) {
|
||
|
tlsConfigLock.Lock()
|
||
|
if tlsConfigRegistry != nil {
|
||
|
delete(tlsConfigRegistry, key)
|
||
|
}
|
||
|
tlsConfigLock.Unlock()
|
||
|
}
|
||
|
|
||
|
func getTLSConfigClone(key string) (config *tls.Config) {
|
||
|
tlsConfigLock.RLock()
|
||
|
if v, ok := tlsConfigRegistry[key]; ok {
|
||
|
config = v.Clone()
|
||
|
}
|
||
|
tlsConfigLock.RUnlock()
|
||
|
return
|
||
|
}
|
||
|
|