extract parsing of datasource tls config to method

This commit is contained in:
Marcus Efraimsson
2019-01-28 19:38:56 +01:00
parent 7df5e3cebf
commit f157c19e16
2 changed files with 35 additions and 56 deletions
+5 -38
View File
@@ -2,15 +2,11 @@ package mysql
import (
"database/sql"
"errors"
"fmt"
"reflect"
"strconv"
"strings"
"crypto/tls"
"crypto/x509"
"github.com/go-sql-driver/mysql"
"github.com/go-xorm/core"
"github.com/grafana/grafana/pkg/log"
@@ -37,42 +33,13 @@ func newMysqlQueryEndpoint(datasource *models.DataSource) (tsdb.TsdbQueryEndpoin
datasource.Database,
)
var tlsSkipVerify, tlsAuth, tlsAuthWithCACert bool
if datasource.JsonData != nil {
tlsAuth = datasource.JsonData.Get("tlsAuth").MustBool(false)
tlsAuthWithCACert = datasource.JsonData.Get("tlsAuthWithCACert").MustBool(false)
tlsSkipVerify = datasource.JsonData.Get("tlsSkipVerify").MustBool(false)
tlsConfig, err := datasource.GetTLSConfig()
if err != nil {
return nil, err
}
if tlsAuth || tlsAuthWithCACert {
secureJsonData := datasource.SecureJsonData.Decrypt()
tlsConfig := tls.Config{
InsecureSkipVerify: tlsSkipVerify,
}
if tlsAuthWithCACert && len(secureJsonData["tlsCACert"]) > 0 {
caPool := x509.NewCertPool()
if ok := caPool.AppendCertsFromPEM([]byte(secureJsonData["tlsCACert"])); !ok {
return nil, errors.New("Failed to parse TLS CA PEM certificate")
}
tlsConfig.RootCAs = caPool
}
if tlsAuth {
certs, err := tls.X509KeyPair([]byte(secureJsonData["tlsClientCert"]), []byte(secureJsonData["tlsClientKey"]))
if err != nil {
return nil, err
}
clientCert := make([]tls.Certificate, 0, 1)
clientCert = append(clientCert, certs)
tlsConfig.Certificates = clientCert
}
mysql.RegisterTLSConfig(datasource.Name, &tlsConfig)
if tlsConfig.RootCAs != nil || len(tlsConfig.Certificates) > 0 {
mysql.RegisterTLSConfig(datasource.Name, tlsConfig)
cnnstr += "&tls=" + datasource.Name
}