2
0
Эх сурвалжийг харах

fix(go): sync member changes;

Vishal Dalwadi 5 сар өмнө
parent
commit
d99218416f
1 өөрчлөгдсөн 23 нэмэгдсэн , 7 устгасан
  1. 23 7
      pro/auth/sync.go

+ 23 - 7
pro/auth/sync.go

@@ -1,6 +1,7 @@
 package auth
 
 import (
+	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/pro/idp"
@@ -45,7 +46,7 @@ func SyncUsers() error {
 	}
 
 	dbUsers, err := logic.GetUsersDB()
-	if err != nil {
+	if err != nil && !database.IsEmptyRecord(err) {
 		return err
 	}
 
@@ -102,12 +103,12 @@ func SyncGroups() error {
 	}
 
 	dbGroups, err := proLogic.ListUserGroups()
-	if err != nil {
+	if err != nil && !database.IsEmptyRecord(err) {
 		return err
 	}
 
 	dbUsers, err := logic.GetUsersDB()
-	if err != nil {
+	if err != nil && !database.IsEmptyRecord(err) {
 		return err
 	}
 
@@ -118,7 +119,7 @@ func SyncGroups() error {
 
 	dbGroupsMap := make(map[string]struct{})
 	for _, group := range dbGroups {
-		dbGroupsMap[group.ID.String()] = struct{}{}
+		dbGroupsMap[group.ExternalIdentityProviderID] = struct{}{}
 	}
 
 	dbUsersMap := make(map[string]models.User)
@@ -142,10 +143,25 @@ func SyncGroups() error {
 			if err != nil {
 				return err
 			}
+		}
+
+		groupMembersMap := make(map[string]struct{})
+		for _, member := range group.Members {
+			groupMembersMap[member.ID] = struct{}{}
+		}
+
+		for _, user := range dbUsers {
+			_, inNetmakerGroup := user.UserGroups[models.UserGroupID(group.Name)]
+			_, inIDPGroup := groupMembersMap[user.ExternalIdentityProviderID]
+
+			if inNetmakerGroup && !inIDPGroup {
+				delete(dbUsersMap[user.ExternalIdentityProviderID].UserGroups, models.UserGroupID(group.Name))
+				modifiedUsers[user.ExternalIdentityProviderID] = struct{}{}
+			}
 
-			for _, member := range group.Members {
-				dbUsersMap[member.ID].UserGroups[models.UserGroupID(group.Name)] = struct{}{}
-				modifiedUsers[member.ID] = struct{}{}
+			if !inNetmakerGroup && inIDPGroup {
+				dbUsersMap[user.ExternalIdentityProviderID].UserGroups[models.UserGroupID(group.Name)] = struct{}{}
+				modifiedUsers[user.ExternalIdentityProviderID] = struct{}{}
 			}
 		}
 	}