diff options
| author | James Elliott <james-d-elliott@users.noreply.github.com> | 2022-10-22 15:25:12 +1100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-22 15:25:12 +1100 | 
| commit | 1d821a0d3a15b853e50c44aa786b846213f0355c (patch) | |
| tree | cca42f7861f72361b402d790d0a4df950b771016 /internal/storage | |
| parent | 8e99cfd22fe715f04be3a4708fc2dce95d0463fa (diff) | |
fix(storage): mysql timestamp parsed incorrectly (#4230)
The timestamps in MySQL were not being parsed correctly. The driver treats all timestamp and datetime objects the same which is not correct.
Diffstat (limited to 'internal/storage')
| -rw-r--r-- | internal/storage/const.go | 4 | ||||
| -rw-r--r-- | internal/storage/sql_provider_backend_mysql.go | 35 | 
2 files changed, 27 insertions, 12 deletions
diff --git a/internal/storage/const.go b/internal/storage/const.go index dc249115f..825caae04 100644 --- a/internal/storage/const.go +++ b/internal/storage/const.go @@ -41,6 +41,10 @@ const (  )  const ( +	sqlNetworkTypeTCP = "tcp" +) + +const (  	encryptionNameCheck = "check"  ) diff --git a/internal/storage/sql_provider_backend_mysql.go b/internal/storage/sql_provider_backend_mysql.go index 6c313ee57..a336aeac9 100644 --- a/internal/storage/sql_provider_backend_mysql.go +++ b/internal/storage/sql_provider_backend_mysql.go @@ -4,6 +4,7 @@ import (  	"fmt"  	"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" @@ -30,21 +31,31 @@ func NewMySQLProvider(config *schema.Configuration) (provider *MySQLProvider) {  }  func dataSourceNameMySQL(config schema.MySQLStorageConfiguration) (dataSourceName string) { -	dataSourceName = fmt.Sprintf("%s:%s", config.Username, config.Password) - -	if dataSourceName != "" { -		dataSourceName += "@" +	dconfig := mysql.NewConfig() + +	switch { +	case config.Port == 0: +		dconfig.Net = sqlNetworkTypeTCP +		dconfig.Addr = fmt.Sprintf("%s:%d", config.Host, 3306) +	default: +		dconfig.Net = sqlNetworkTypeTCP +		dconfig.Addr = fmt.Sprintf("%s:%d", config.Host, config.Port)  	} -	address := config.Host -	if config.Port > 0 { -		address += fmt.Sprintf(":%d", config.Port) +	switch config.Port { +	case 0: +		dconfig.Addr = config.Host +	default: +		dconfig.Addr = fmt.Sprintf("%s:%d", config.Host, config.Port)  	} -	dataSourceName += fmt.Sprintf("tcp(%s)/%s", address, config.Database) - -	dataSourceName += "?" -	dataSourceName += fmt.Sprintf("timeout=%ds&multiStatements=true&parseTime=true", int32(config.Timeout/time.Second)) +	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 -	return dataSourceName +	return dconfig.FormatDSN()  }  | 
