From 14c9f154ebb5a7be4fed9c7b371a11b9ea7a15ee Mon Sep 17 00:00:00 2001 From: Duc Nguyen Date: Sun, 14 Apr 2024 20:02:54 +0700 Subject: [PATCH] Refactor code --- authorizer/session_authorizer.go | 8 ++++++-- cassandra/user_repository.go | 4 +++- dynamodb/user_repository.go | 4 +++- mongo/user_repository.go | 7 ++++++- sql/{privileges_loader.go => privileges_adapter.go} | 12 ++++++------ sql/user_repository.go | 4 +++- 6 files changed, 27 insertions(+), 12 deletions(-) rename sql/{privileges_loader.go => privileges_adapter.go} (73%) diff --git a/authorizer/session_authorizer.go b/authorizer/session_authorizer.go index 3357790..e3e23c1 100644 --- a/authorizer/session_authorizer.go +++ b/authorizer/session_authorizer.go @@ -35,9 +35,10 @@ type SessionAuthorizer struct { func NewSessionAuthorizer(secretKey string, verifyToken func(tokenString string, secret string) (map[string]interface{}, int64, int64, error), refreshExpire func(w http.ResponseWriter, sessionId string) error, + cache ICacheService, sessionExpiredTime time.Duration, logError func(ctx context.Context, msg string, opts ...map[string]interface{}), singleSession bool, encodeSessionID func(sid string) string, decodeSessionID func(value string) (string, error), - cache ICacheService, sessionExpiredTime time.Duration, logError func(ctx context.Context, msg string, opts ...map[string]interface{}), singleSession bool, opts ...string) *SessionAuthorizer { + opts ...string) *SessionAuthorizer { var userId, sid, id, prefixSessionIndex, cookieName string if len(opts) > 0 { prefixSessionIndex = opts[0] @@ -195,7 +196,10 @@ func (h *SessionAuthorizer) Verify(next http.Handler, skipRefreshTTL bool, sessi return } if h.RefreshExpire != nil { - err := h.RefreshExpire(writer, h.EncodeSessionID(sessionId)) + if h.EncodeSessionID != nil { + sessionId = h.EncodeSessionID(sessionId) + } + err := h.RefreshExpire(writer, sessionId) if err != nil { http.Error(writer, "error to refresh expire sessionId", http.StatusInternalServerError) return diff --git a/cassandra/user_repository.go b/cassandra/user_repository.go index 4086e41..4801d51 100644 --- a/cassandra/user_repository.go +++ b/cassandra/user_repository.go @@ -44,7 +44,9 @@ type UserRepository struct { func NewUserRepositoryByConfig(session *gocql.Session, userTableName, passwordTableName string, activatedStatus string, status a.UserStatusConfig, c a.SchemaConfig, options ...func(context.Context, string) (bool, error)) *UserRepository { return NewUserRepository(session, userTableName, passwordTableName, activatedStatus, status, c.Id, c.Username, c.UserId, c.SuccessTime, c.FailTime, c.FailCount, c.LockedUntilTime, c.Status, c.PasswordChangedTime, c.Password, c.Contact, c.Email, c.Phone, c.DisplayName, c.MaxPasswordAge, c.UserType, c.AccessDateFrom, c.AccessDateTo, c.AccessTimeFrom, c.AccessTimeTo, c.TwoFactors, options...) } - +func NewUserAdapterByConfig(session *gocql.Session, userTableName, passwordTableName string, activatedStatus string, status a.UserStatusConfig, c a.SchemaConfig, options ...func(context.Context, string) (bool, error)) *UserRepository { + return NewUserRepositoryByConfig(session, userTableName, passwordTableName, activatedStatus, status, c, options...) +} func NewUserRepository(session *gocql.Session, userTableName, passwordTableName string, activatedStatus string, status a.UserStatusConfig, idName, userName, userID, successTimeName, failTimeName, failCountName, lockedUntilTimeName, statusName, passwordChangedTimeName, passwordName, contactName, emailName, phoneName, displayNameName, maxPasswordAgeName, userTypeName, accessDateFromName, accessDateToName, accessTimeFromName, accessTimeToName, twoFactorsName string, options ...func(context.Context, string) (bool, error)) *UserRepository { var checkTwoFactors func(context.Context, string) (bool, error) if len(options) >= 1 { diff --git a/dynamodb/user_repository.go b/dynamodb/user_repository.go index 9ea90b8..51eefb4 100644 --- a/dynamodb/user_repository.go +++ b/dynamodb/user_repository.go @@ -46,7 +46,9 @@ type UserRepository struct { func NewUserRepositoryByConfig(dynamoDB *dynamodb.DynamoDB, userTableName, passwordTableName string, activatedStatus interface{}, status auth.UserStatusConfig, c auth.SchemaConfig, options ...func(context.Context, string) (bool, error)) *UserRepository { return NewUserRepository(dynamoDB, userTableName, passwordTableName, activatedStatus, status, c.Username, c.SuccessTime, c.FailTime, c.FailCount, c.LockedUntilTime, c.Status, c.PasswordChangedTime, c.Password, c.Contact, c.Email, c.Phone, c.DisplayName, c.MaxPasswordAge, c.Roles, c.UserType, c.AccessDateFrom, c.AccessDateTo, c.AccessTimeFrom, c.AccessTimeTo, c.TwoFactors, options...) } - +func NewUserAdapterByConfig(dynamoDB *dynamodb.DynamoDB, userTableName, passwordTableName string, activatedStatus interface{}, status auth.UserStatusConfig, c auth.SchemaConfig, options ...func(context.Context, string) (bool, error)) *UserRepository { + return NewUserRepositoryByConfig(dynamoDB, userTableName, passwordTableName, activatedStatus, status, c, options...) +} func NewUserRepository(dynamoDB *dynamodb.DynamoDB, userTableName, passwordTableName string, activatedStatus interface{}, status auth.UserStatusConfig, userName, successTimeName, failTimeName, failCountName, lockedUntilTimeName, statusName, passwordChangedTimeName, passwordName, contactName, emailName, phoneName, displayNameName, maxPasswordAgeName, rolesName, userTypeName, accessDateFromName, accessDateToName, accessTimeFromName, accessTimeToName, twoFactors string, options ...func(context.Context, string) (bool, error)) *UserRepository { var checkTwoFactors func(context.Context, string) (bool, error) if len(options) > 0 && options[0] != nil { diff --git a/mongo/user_repository.go b/mongo/user_repository.go index 572d30c..7f132c1 100644 --- a/mongo/user_repository.go +++ b/mongo/user_repository.go @@ -45,7 +45,12 @@ type MongoUserRepository struct { func NewUserRepositoryByConfig(db *mongo.Database, userCollectionName, passwordCollectionName string, activatedStatus interface{}, status a.UserStatusConfig, c a.SchemaConfig, options ...func(context.Context, string) (bool, error)) *MongoUserRepository { return NewUserRepository(db, userCollectionName, passwordCollectionName, activatedStatus, status, c.Username, c.SuccessTime, c.FailTime, c.FailCount, c.LockedUntilTime, c.Status, c.PasswordChangedTime, c.Password, c.Contact, c.Email, c.Phone, c.DisplayName, c.MaxPasswordAge, c.Roles, c.UserType, c.AccessDateFrom, c.AccessDateTo, c.AccessTimeFrom, c.AccessTimeTo, c.TwoFactors, options...) } - +func NewUserAdapterByConfig(db *mongo.Database, userCollectionName, passwordCollectionName string, activatedStatus interface{}, status a.UserStatusConfig, c a.SchemaConfig, options ...func(context.Context, string) (bool, error)) *MongoUserRepository { + return NewUserRepositoryByConfig(db, userCollectionName, passwordCollectionName, activatedStatus, status, c, options...) +} +func NewUserAdapter(db *mongo.Database, userCollectionName, passwordCollectionName string, activatedStatus interface{}, status a.UserStatusConfig, userName, successTimeName, failTimeName, failCountName, lockedUntilTimeName, statusName, passwordChangedTimeName, passwordName, contactName, emailName, phoneName, displayNameName, maxPasswordAgeName, rolesName, userTypeName, accessDateFromName, accessDateToName, accessTimeFromName, accessTimeToName, twoFactorsName string, options ...func(context.Context, string) (bool, error)) *MongoUserRepository { + return NewUserRepository(db, userCollectionName, passwordCollectionName, activatedStatus, status, userName, successTimeName, failTimeName, failCountName, lockedUntilTimeName, statusName, passwordChangedTimeName, passwordName, contactName, emailName, phoneName, displayNameName, maxPasswordAgeName, rolesName, userTypeName, accessDateFromName, accessDateToName, accessTimeFromName, accessTimeToName, twoFactorsName, options...) +} func NewUserRepository(db *mongo.Database, userCollectionName, passwordCollectionName string, activatedStatus interface{}, status a.UserStatusConfig, userName, successTimeName, failTimeName, failCountName, lockedUntilTimeName, statusName, passwordChangedTimeName, passwordName, contactName, emailName, phoneName, displayNameName, maxPasswordAgeName, rolesName, userTypeName, accessDateFromName, accessDateToName, accessTimeFromName, accessTimeToName, twoFactorsName string, options ...func(context.Context, string) (bool, error)) *MongoUserRepository { passwordCollection := db.Collection(passwordCollectionName) userCollection := passwordCollection diff --git a/sql/privileges_loader.go b/sql/privileges_adapter.go similarity index 73% rename from sql/privileges_loader.go rename to sql/privileges_adapter.go index 9084723..d63c8b3 100644 --- a/sql/privileges_loader.go +++ b/sql/privileges_adapter.go @@ -8,7 +8,7 @@ import ( "strings" ) -type PrivilegesLoader struct { +type PrivilegesAdapter struct { DB *sql.DB Query string ParameterCount int @@ -19,16 +19,16 @@ type PrivilegesLoader struct { moduleFields map[string]int } -func NewPrivilegesLoader(db *sql.DB, query string, options ...int) (*PrivilegesLoader, error) { +func NewPrivilegesAdapter(db *sql.DB, query string, options ...int) (*PrivilegesAdapter, error) { var parameterCount int if len(options) >= 1 && options[0] > 0 { parameterCount = options[0] } else { parameterCount = 0 } - return NewSqlPrivilegesLoader(db, query, parameterCount, false, true, true) + return NewSqlPrivilegesAdapter(db, query, parameterCount, false, true, true) } -func NewSqlPrivilegesLoader(db *sql.DB, query string, parameterCount int, options ...bool) (*PrivilegesLoader, error) { +func NewSqlPrivilegesAdapter(db *sql.DB, query string, parameterCount int, options ...bool) (*PrivilegesAdapter, error) { var or, handleDriver, noSequence bool if len(options) >= 1 { or = options[0] @@ -55,9 +55,9 @@ func NewSqlPrivilegesLoader(db *sql.DB, query string, parameterCount int, option if err != nil { return nil, err } - return &PrivilegesLoader{DB: db, Query: query, ParameterCount: parameterCount, Or: or, NoSequence: noSequence, HandleDriver: handleDriver, Driver: driver, moduleFields: moduleFields}, nil + return &PrivilegesAdapter{DB: db, Query: query, ParameterCount: parameterCount, Or: or, NoSequence: noSequence, HandleDriver: handleDriver, Driver: driver, moduleFields: moduleFields}, nil } -func (l PrivilegesLoader) Load(ctx context.Context, id string) ([]auth.Privilege, error) { +func (l PrivilegesAdapter) Load(ctx context.Context, id string) ([]auth.Privilege, error) { var models []auth.Module p0 := make([]auth.Privilege, 0) params := make([]interface{}, 0) diff --git a/sql/user_repository.go b/sql/user_repository.go index 4d0767b..52ac308 100644 --- a/sql/user_repository.go +++ b/sql/user_repository.go @@ -21,7 +21,9 @@ type SqlUserRepository struct { Param func(int) string Conf DBConfig } - +func NewUserAdapter(db *sql.DB, query string, conf DBConfig, status a.UserStatusConfig, options ...bool) (*SqlUserRepository, error) { + return NewUserRepository(db, query, conf, status, options...) +} func NewUserRepository(db *sql.DB, query string, conf DBConfig, status a.UserStatusConfig, options ...bool) (*SqlUserRepository, error) { var handleDriver bool if len(options) >= 1 {