summaryrefslogtreecommitdiff
path: root/internal/storage
diff options
context:
space:
mode:
authorJames Elliott <james-d-elliott@users.noreply.github.com>2022-10-22 15:25:12 +1100
committerGitHub <noreply@github.com>2022-10-22 15:25:12 +1100
commit1d821a0d3a15b853e50c44aa786b846213f0355c (patch)
treecca42f7861f72361b402d790d0a4df950b771016 /internal/storage
parent8e99cfd22fe715f04be3a4708fc2dce95d0463fa (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.go4
-rw-r--r--internal/storage/sql_provider_backend_mysql.go35
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()
}