|
|
@@ -14,12 +14,21 @@ import (
|
|
|
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
|
|
|
|
+ "github.com/go-sql-driver/mysql"
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
|
"github.com/go-xorm/xorm"
|
|
|
_ "github.com/lib/pq"
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
|
)
|
|
|
|
|
|
+type MySQLConfig struct {
|
|
|
+ SslMode string
|
|
|
+ CaCertPath string
|
|
|
+ ClientKeyPath string
|
|
|
+ ClientCertPath string
|
|
|
+ ServerCertName string
|
|
|
+}
|
|
|
+
|
|
|
var (
|
|
|
x *xorm.Engine
|
|
|
dialect migrator.Dialect
|
|
|
@@ -30,6 +39,8 @@ var (
|
|
|
Type, Host, Name, User, Pwd, Path, SslMode string
|
|
|
}
|
|
|
|
|
|
+ mysqlConfig MySQLConfig
|
|
|
+
|
|
|
UseSQLite3 bool
|
|
|
)
|
|
|
|
|
|
@@ -113,8 +124,22 @@ func getEngine() (*xorm.Engine, error) {
|
|
|
cnnstr := ""
|
|
|
switch DbCfg.Type {
|
|
|
case "mysql":
|
|
|
- cnnstr = fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8",
|
|
|
- DbCfg.User, DbCfg.Pwd, DbCfg.Host, DbCfg.Name)
|
|
|
+ protocol := "tcp"
|
|
|
+ if strings.HasPrefix(DbCfg.Host, "/") {
|
|
|
+ protocol = "unix"
|
|
|
+ }
|
|
|
+
|
|
|
+ cnnstr = fmt.Sprintf("%s:%s@%s(%s)/%s?charset=utf8",
|
|
|
+ DbCfg.User, DbCfg.Pwd, protocol, DbCfg.Host, DbCfg.Name)
|
|
|
+
|
|
|
+ if mysqlConfig.SslMode == "true" || mysqlConfig.SslMode == "skip-verify" {
|
|
|
+ tlsCert, err := makeCert("custom", mysqlConfig)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ mysql.RegisterTLSConfig("custom", tlsCert)
|
|
|
+ cnnstr += "&tls=custom"
|
|
|
+ }
|
|
|
case "postgres":
|
|
|
var host, port = "127.0.0.1", "5432"
|
|
|
fields := strings.Split(DbCfg.Host, ":")
|
|
|
@@ -156,4 +181,12 @@ func LoadConfig() {
|
|
|
}
|
|
|
DbCfg.SslMode = sec.Key("ssl_mode").String()
|
|
|
DbCfg.Path = sec.Key("path").MustString("data/grafana.db")
|
|
|
+
|
|
|
+ if DbCfg.Type == "mysql" {
|
|
|
+ mysqlConfig.SslMode = DbCfg.SslMode
|
|
|
+ mysqlConfig.CaCertPath = sec.Key("ca_cert_path").String()
|
|
|
+ mysqlConfig.ClientKeyPath = sec.Key("client_key_path").String()
|
|
|
+ mysqlConfig.ClientCertPath = sec.Key("client_cert_path").String()
|
|
|
+ mysqlConfig.ServerCertName = sec.Key("server_cert_name").String()
|
|
|
+ }
|
|
|
}
|