db/mysql/connector.go

49 lines
994 B
Go
Raw Permalink Normal View History

package mysql
import (
"context"
"crypto/tls"
"database/sql/driver"
"github.com/go-sql-driver/mysql"
"apigo.cc/go/db"
"apigo.cc/go/safe"
)
type SecureMysqlConnector struct {
conf *db.Config
pwd *safe.SafeBuf
tls *tls.Config
}
func (c *SecureMysqlConnector) Connect(ctx context.Context) (driver.Conn, error) {
cfg, err := mysql.ParseDSN(c.conf.Args)
if err != nil {
cfg = mysql.NewConfig()
}
cfg.User = c.conf.User
cfg.Net = "tcp"
cfg.Addr = c.conf.Host
cfg.DBName = c.conf.DB
cfg.TLS = c.tls
pwdBuf := c.pwd.Open()
defer pwdBuf.Close()
cfg.Passwd = pwdBuf.String()
tmpConnector, err := mysql.NewConnector(cfg)
if err != nil {
return nil, err
}
return tmpConnector.Connect(ctx)
}
func (c *SecureMysqlConnector) Driver() driver.Driver {
return &mysql.MySQLDriver{}
}
func init() {
db.RegisterConnector("mysql", func(conf *db.Config, pwd *safe.SafeBuf, tls *tls.Config) driver.Connector {
return &SecureMysqlConnector{conf: conf, pwd: pwd, tls: tls}
})
}