diff options
| author | James Elliott <james-d-elliott@users.noreply.github.com> | 2022-10-22 16:41:27 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-22 16:41:27 +1100 |
| commit | 1ea29cb2c24b44d15dffed3964e41e56b32da02d (patch) | |
| tree | f31fb4a2b54478c5f887e45564d6b8585d9878cc /internal/storage/sql_provider_backend_mysql.go | |
| parent | 1d821a0d3a15b853e50c44aa786b846213f0355c (diff) | |
feat(storage): unix socket support (#4231)
Support for unix sockets for MySQL and PostgreSQL.
Diffstat (limited to 'internal/storage/sql_provider_backend_mysql.go')
| -rw-r--r-- | internal/storage/sql_provider_backend_mysql.go | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/internal/storage/sql_provider_backend_mysql.go b/internal/storage/sql_provider_backend_mysql.go index a336aeac9..b0382ed7d 100644 --- a/internal/storage/sql_provider_backend_mysql.go +++ b/internal/storage/sql_provider_backend_mysql.go @@ -1,11 +1,12 @@ package storage import ( + "crypto/x509" "fmt" + "path" "time" "github.com/go-sql-driver/mysql" - _ "github.com/go-sql-driver/mysql" // Load the MySQL Driver used in the connection string. "github.com/authelia/authelia/v4/internal/configuration/schema" ) @@ -16,9 +17,9 @@ type MySQLProvider struct { } // NewMySQLProvider a MySQL provider. -func NewMySQLProvider(config *schema.Configuration) (provider *MySQLProvider) { +func NewMySQLProvider(config *schema.Configuration, caCertPool *x509.CertPool) (provider *MySQLProvider) { provider = &MySQLProvider{ - SQLProvider: NewSQLProvider(config, providerMySQL, providerMySQL, dataSourceNameMySQL(*config.Storage.MySQL)), + SQLProvider: NewSQLProvider(config, providerMySQL, providerMySQL, dsnMySQL(config.Storage.MySQL)), } // All providers have differing SELECT existing table statements. @@ -30,32 +31,35 @@ func NewMySQLProvider(config *schema.Configuration) (provider *MySQLProvider) { return provider } -func dataSourceNameMySQL(config schema.MySQLStorageConfiguration) (dataSourceName string) { - dconfig := mysql.NewConfig() +func dsnMySQL(config *schema.MySQLStorageConfiguration) (dataSourceName string) { + dsnConfig := mysql.NewConfig() switch { + case path.IsAbs(config.Host): + dsnConfig.Net = sqlNetworkTypeUnixSocket + dsnConfig.Addr = config.Host case config.Port == 0: - dconfig.Net = sqlNetworkTypeTCP - dconfig.Addr = fmt.Sprintf("%s:%d", config.Host, 3306) + dsnConfig.Net = sqlNetworkTypeTCP + dsnConfig.Addr = fmt.Sprintf("%s:%d", config.Host, 3306) default: - dconfig.Net = sqlNetworkTypeTCP - dconfig.Addr = fmt.Sprintf("%s:%d", config.Host, config.Port) + dsnConfig.Net = sqlNetworkTypeTCP + dsnConfig.Addr = fmt.Sprintf("%s:%d", config.Host, config.Port) } switch config.Port { case 0: - dconfig.Addr = config.Host + dsnConfig.Addr = config.Host default: - dconfig.Addr = fmt.Sprintf("%s:%d", config.Host, config.Port) + dsnConfig.Addr = fmt.Sprintf("%s:%d", config.Host, config.Port) } - dconfig.DBName = config.Database - dconfig.User = config.Username - dconfig.Passwd = config.Password - dconfig.Timeout = config.Timeout - dconfig.MultiStatements = true - dconfig.ParseTime = true - dconfig.Loc = time.Local + dsnConfig.DBName = config.Database + dsnConfig.User = config.Username + dsnConfig.Passwd = config.Password + dsnConfig.Timeout = config.Timeout + dsnConfig.MultiStatements = true + dsnConfig.ParseTime = true + dsnConfig.Loc = time.Local - return dconfig.FormatDSN() + return dsnConfig.FormatDSN() } |
