refactor to improve database operability in hwsauth
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
package hwsauth
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
"git.haelnorr.com/h/golib/hws"
|
||||
"git.haelnorr.com/h/golib/jwt"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
type Authenticator[T Model] struct {
|
||||
type Authenticator[T Model, TX DBTransaction] struct {
|
||||
tokenGenerator *jwt.TokenGenerator
|
||||
load LoadFunc[T]
|
||||
conn DBConnection
|
||||
load LoadFunc[T, TX]
|
||||
beginTx BeginTX
|
||||
ignoredPaths []string
|
||||
logger *zerolog.Logger
|
||||
server *hws.Server
|
||||
@@ -25,22 +23,22 @@ type Authenticator[T Model] struct {
|
||||
// If cfg is nil or any required fields are not set, default values will be used or an error returned.
|
||||
// Required fields: SecretKey (no default)
|
||||
// If SSL is true, TrustedHost is also required.
|
||||
func NewAuthenticator[T Model](
|
||||
func NewAuthenticator[T Model, TX DBTransaction](
|
||||
cfg *Config,
|
||||
load LoadFunc[T],
|
||||
load LoadFunc[T, TX],
|
||||
server *hws.Server,
|
||||
conn DBConnection,
|
||||
beginTx BeginTX,
|
||||
logger *zerolog.Logger,
|
||||
errorPage hws.ErrorPageFunc,
|
||||
) (*Authenticator[T], error) {
|
||||
) (*Authenticator[T, TX], error) {
|
||||
if load == nil {
|
||||
return nil, errors.New("No function to load model supplied")
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("No hws.Server provided")
|
||||
}
|
||||
if conn == nil {
|
||||
return nil, errors.New("No database connection supplied")
|
||||
if beginTx == nil {
|
||||
return nil, errors.New("No beginTx function provided")
|
||||
}
|
||||
if logger == nil {
|
||||
return nil, errors.New("No logger provided")
|
||||
@@ -72,13 +70,6 @@ func NewAuthenticator[T Model](
|
||||
cfg.LandingPage = "/profile"
|
||||
}
|
||||
|
||||
// Cast DBConnection to *sql.DB
|
||||
// DBConnection is satisfied by *sql.DB, so this cast should be safe for standard usage
|
||||
sqlDB, ok := conn.(*sql.DB)
|
||||
if !ok {
|
||||
return nil, errors.New("DBConnection must be *sql.DB for JWT token generation")
|
||||
}
|
||||
|
||||
// Configure JWT table
|
||||
tableConfig := jwt.DefaultTableConfig()
|
||||
if cfg.JWTTableName != "" {
|
||||
@@ -92,22 +83,21 @@ func NewAuthenticator[T Model](
|
||||
FreshExpireAfter: cfg.TokenFreshTime,
|
||||
TrustedHost: cfg.TrustedHost,
|
||||
SecretKey: cfg.SecretKey,
|
||||
DBConn: sqlDB,
|
||||
DBType: jwt.DatabaseType{
|
||||
Type: cfg.DatabaseType,
|
||||
Version: cfg.DatabaseVersion,
|
||||
},
|
||||
TableConfig: tableConfig,
|
||||
})
|
||||
}, beginTx)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "jwt.CreateGenerator")
|
||||
}
|
||||
|
||||
auth := Authenticator[T]{
|
||||
auth := Authenticator[T, TX]{
|
||||
tokenGenerator: tokenGen,
|
||||
load: load,
|
||||
server: server,
|
||||
conn: conn,
|
||||
beginTx: beginTx,
|
||||
logger: logger,
|
||||
errorPage: errorPage,
|
||||
SSL: cfg.SSL,
|
||||
|
||||
Reference in New Issue
Block a user