From f94d3252de0e24e0d68202df2d1a7249a9b4feb9 Mon Sep 17 00:00:00 2001 From: caffeinated92 Date: Tue, 11 Jun 2024 10:04:27 +0700 Subject: [PATCH] change auth from map to sync.Map --- server/api.go | 28 ++++++++++++++++------------ server/server.go | 4 ++-- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/server/api.go b/server/api.go index 8ed96e6b9..3b02ba33c 100644 --- a/server/api.go +++ b/server/api.go @@ -305,7 +305,8 @@ func (repman *ReplicationManager) loginHandler(w http.ResponseWriter, r *http.Re fmt.Fprintf(w, "Error in request") return } - if auth_try, ok := repman.UserAuthTry[user.Username]; ok { + if v, ok := repman.UserAuthTry.Load(user.Username); ok { + auth_try := v.(authTry) if auth_try.Try == 3 { if time.Now().Before(auth_try.Time.Add(3 * time.Minute)) { fmt.Println("Time until last auth try : " + time.Until(auth_try.Time).String()) @@ -315,28 +316,31 @@ func (repman *ReplicationManager) loginHandler(w http.ResponseWriter, r *http.Re } else { auth_try.Try = 1 auth_try.Time = time.Now() - repman.UserAuthTry[user.Username] = auth_try + repman.UserAuthTry.Store(user.Username, auth_try) } } else { auth_try.Try += 1 - repman.UserAuthTry[user.Username] = auth_try + repman.UserAuthTry.Store(user.Username, auth_try) } } else { - var auth_try authTry - auth_try.User = user.Username - auth_try.Try = 1 - auth_try.Time = time.Now() - repman.UserAuthTry[user.Username] = auth_try + var auth_try authTry = authTry{ + User: user.Username, + Try: 1, + Time: time.Now(), + } + repman.UserAuthTry.Store(user.Username, auth_try) } for _, cluster := range repman.Clusters { //validate user credentials if cluster.IsValidACL(user.Username, user.Password, r.URL.Path, "oidc") { - var auth_try authTry - auth_try.Try = 1 - auth_try.Time = time.Now() - repman.UserAuthTry[user.Username] = auth_try + var auth_try authTry = authTry{ + User: user.Username, + Try: 1, + Time: time.Now(), + } + repman.UserAuthTry.Store(user.Username, auth_try) signer := jwt.New(jwt.SigningMethodRS256) claims := signer.Claims.(jwt.MapClaims) diff --git a/server/server.go b/server/server.go index 2bd77a204..33651dfe3 100644 --- a/server/server.go +++ b/server/server.go @@ -92,7 +92,7 @@ type ReplicationManager struct { BackupLogicalList map[string]bool `json:"backupLogicalList"` BackupPhysicalList map[string]bool `json:"backupPhysicalList"` currentCluster *cluster.Cluster `json:"-"` - UserAuthTry map[string]authTry `json:"-"` + UserAuthTry sync.Map `json:"-"` OAuthAccessToken *oauth2.Token `json:"-"` ViperConfig *viper.Viper `json:"-"` tlog s18log.TermLog @@ -895,7 +895,7 @@ func (repman *ReplicationManager) InitConfig(conf config.Config) { repman.DynamicFlagMaps = make(map[string]map[string]interface{}) ImmuableMap := make(map[string]interface{}) DynamicMap := make(map[string]interface{}) - repman.UserAuthTry = make(map[string]authTry) + // repman.UserAuthTry = make(map[string]authTry) repman.cloud18CheckSum = nil // call after init if configuration file is provide