Ver código fonte

feat(go): reinitialize auth provider and idp sync hook;

Vishal Dalwadi 4 meses atrás
pai
commit
86a5666105
7 arquivos alterados com 32 adições e 17 exclusões
  1. 2 5
      controllers/server.go
  2. 2 3
      logic/auth.go
  3. 9 0
      logic/settings.go
  4. 11 5
      pro/auth/auth.go
  5. 4 2
      pro/auth/sync.go
  6. 2 1
      pro/controllers/users.go
  7. 2 1
      pro/initialize.go

+ 2 - 5
controllers/server.go

@@ -12,7 +12,6 @@ import (
 	"github.com/gorilla/mux"
 	"golang.org/x/exp/slog"
 
-	"github.com/gravitl/netmaker/pro/auth"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
@@ -279,12 +278,10 @@ func updateSettings(w http.ResponseWriter, r *http.Request) {
 func reInit(curr, new models.ServerSettings, force bool) {
 	logic.SettingsMutex.Lock()
 	defer logic.SettingsMutex.Unlock()
-	logic.InitializeAuthProvider()
+	logic.ResetAuthProvider()
 	logic.EmailInit()
 	logic.SetVerbosity(int(logic.GetServerSettings().Verbosity))
-	if curr.IDPSyncInterval != new.IDPSyncInterval {
-		auth.ResetSyncHook()
-	}
+	logic.ResetIDPSyncHook()
 	// check if auto update is changed
 	if force {
 		if curr.NetclientAutoUpdate != new.NetclientAutoUpdate {

+ 2 - 3
logic/auth.go

@@ -16,10 +16,8 @@ import (
 	"golang.org/x/exp/slog"
 
 	"github.com/gravitl/netmaker/database"
-	"github.com/gravitl/netmaker/db"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/models"
-	"github.com/gravitl/netmaker/schema"
 )
 
 const (
@@ -34,7 +32,8 @@ func ClearSuperUserCache() {
 	superUser = models.User{}
 }
 
-var InitializeAuthProvider = func() string { return "" }
+var ResetAuthProvider = func() { return }
+var ResetIDPSyncHook = func() { return }
 
 // HasSuperAdmin - checks if server has an superadmin/owner
 func HasSuperAdmin() (bool, error) {

+ 9 - 0
logic/settings.go

@@ -272,6 +272,11 @@ func GetAzureTenant() string {
 	return GetServerSettings().AzureTenant
 }
 
+// IsSyncEnabled returns whether auth provider sync is enabled.
+func IsSyncEnabled() bool {
+	return GetServerSettings().SyncEnabled
+}
+
 // GetIDPSyncInterval returns the interval at which the netmaker should sync
 // data from IDP.
 func GetIDPSyncInterval() time.Duration {
@@ -280,6 +285,10 @@ func GetIDPSyncInterval() time.Duration {
 		return 24 * time.Hour
 	}
 
+	if syncInterval == 0 {
+		return 24 * time.Hour
+	}
+
 	return syncInterval
 }
 

+ 11 - 5
pro/auth/auth.go

@@ -63,6 +63,17 @@ func getCurrentAuthFunctions() map[string]interface{} {
 	}
 }
 
+// ResetAuthProvider resets the auth provider configuration.
+func ResetAuthProvider() {
+	settings := logic.GetServerSettings()
+
+	if settings.AuthProvider == "" {
+		auth_provider = nil
+	}
+
+	InitializeAuthProvider()
+}
+
 // InitializeAuthProvider - initializes the auth provider if any is present
 func InitializeAuthProvider() string {
 	var functions = getCurrentAuthFunctions()
@@ -93,11 +104,6 @@ func InitializeAuthProvider() string {
 	return authInfo[0]
 }
 
-// RemoveAuthProvider remove the auth provider configuration.
-func RemoveAuthProvider() {
-	auth_provider = nil
-}
-
 // HandleAuthCallback - handles oauth callback
 // Note: not included in API reference as part of the OAuth process itself.
 func HandleAuthCallback(w http.ResponseWriter, r *http.Request) {

+ 4 - 2
pro/auth/sync.go

@@ -29,10 +29,12 @@ func StartSyncHook() {
 	}
 }
 
-func ResetSyncHook() {
+func ResetIDPSyncHook() {
 	if syncTicker != nil {
 		syncTicker.Stop()
-		go StartSyncHook()
+		if logic.IsSyncEnabled() {
+			go StartSyncHook()
+		}
 	}
 }
 

+ 2 - 1
pro/controllers/users.go

@@ -1459,7 +1459,8 @@ func removeIDPIntegration(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	proAuth.RemoveAuthProvider()
+	proAuth.ResetAuthProvider()
+	proAuth.ResetIDPSyncHook()
 
 	go func() {
 		err := proAuth.SyncFromIDP()

+ 2 - 1
pro/initialize.go

@@ -140,7 +140,8 @@ func InitPro() {
 	logic.GetUserGroupsInNetwork = proLogic.GetUserGroupsInNetwork
 	logic.GetUserGroup = proLogic.GetUserGroup
 	logic.GetNodeStatus = proLogic.GetNodeStatus
-	logic.InitializeAuthProvider = auth.InitializeAuthProvider
+	logic.ResetAuthProvider = auth.ResetAuthProvider
+	logic.ResetIDPSyncHook = auth.ResetIDPSyncHook
 	logic.EmailInit = email.Init
 }