| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | package logicimport (	"encoding/json"	"github.com/google/uuid"	"github.com/gravitl/netmaker/database"	"github.com/gravitl/netmaker/logic"	"github.com/gravitl/netmaker/models")func MigrateToUUIDs() {	groups, err := ListUserGroups()	if err != nil {		return	}	groupsMapping := make(map[models.UserGroupID]models.UserGroupID)	for _, group := range groups {		if group.Default {			continue		}		_, err := uuid.Parse(string(group.ID))		if err == nil {			// group id is already an uuid, so no need to update			continue		}		oldGroupID := group.ID		group.ID = models.UserGroupID(uuid.NewString())		groupsMapping[oldGroupID] = group.ID		groupBytes, err := json.Marshal(group)		if err != nil {			continue		}		err = database.Insert(group.ID.String(), string(groupBytes), database.USER_GROUPS_TABLE_NAME)		if err != nil {			continue		}		err = database.DeleteRecord(database.USER_GROUPS_TABLE_NAME, oldGroupID.String())		if err != nil {			continue		}	}	users, err := logic.GetUsersDB()	if err != nil {		return	}	for _, user := range users {		userGroups := make(map[models.UserGroupID]struct{})		for groupID := range user.UserGroups {			newGroupID, ok := groupsMapping[groupID]			if !ok {				userGroups[groupID] = struct{}{}			} else {				userGroups[newGroupID] = struct{}{}			}		}		user.UserGroups = userGroups		err = logic.UpsertUser(user)		if err != nil {			continue		}	}	for _, acl := range logic.ListAcls() {		srcList := make([]models.AclPolicyTag, len(acl.Src))		for i, src := range acl.Src {			if src.ID == models.UserGroupAclID {				newGroupID, ok := groupsMapping[models.UserGroupID(src.Value)]				if ok {					src.Value = newGroupID.String()				}			}			srcList[i] = src		}		dstList := make([]models.AclPolicyTag, len(acl.Dst))		for i, dst := range acl.Dst {			if dst.ID == models.UserGroupAclID {				newGroupID, ok := groupsMapping[models.UserGroupID(dst.Value)]				if ok {					dst.Value = newGroupID.String()				}			}			dstList[i] = dst		}		err = logic.UpsertAcl(acl)		if err != nil {			continue		}	}	invites, err := logic.ListUserInvites()	if err != nil {		return	}	for _, invite := range invites {		userGroups := make(map[models.UserGroupID]struct{})		for groupID := range invite.UserGroups {			newGroupID, ok := groupsMapping[groupID]			if !ok {				invite.UserGroups[groupID] = struct{}{}			} else {				invite.UserGroups[newGroupID] = struct{}{}			}		}		invite.UserGroups = userGroups		err = logic.InsertUserInvite(invite)		if err != nil {			continue		}	}}func MigrateUserRoleAndGroups(user models.User) {	if user.PlatformRoleID == models.AdminRole || user.PlatformRoleID == models.SuperAdminRole {		return	}	if len(user.RemoteGwIDs) > 0 {		// define user roles for network		// assign relevant network role to user		for remoteGwID := range user.RemoteGwIDs {			gwNode, err := logic.GetNodeByID(remoteGwID)			if err != nil {				continue			}			var groupID models.UserGroupID			if user.PlatformRoleID == models.ServiceUser {				groupID = GetDefaultNetworkUserGroupID(models.NetworkID(gwNode.Network))			} else {				groupID = GetDefaultNetworkAdminGroupID(models.NetworkID(gwNode.Network))			}			if err != nil {				continue			}			user.UserGroups[groupID] = struct{}{}		}	}	if len(user.NetworkRoles) > 0 {		for netID, netRoles := range user.NetworkRoles {			var groupID models.UserGroupID			adminAccess := false			for netRoleID := range netRoles {				permTemplate, err := logic.GetRole(netRoleID)				if err == nil {					if permTemplate.FullAccess {						adminAccess = true					}				}			}			if user.PlatformRoleID == models.ServiceUser {				groupID = GetDefaultNetworkUserGroupID(netID)			} else {				if adminAccess {					groupID = GetDefaultNetworkAdminGroupID(netID)				} else {					groupID = GetDefaultNetworkUserGroupID(netID)				}			}			user.UserGroups[groupID] = struct{}{}			user.NetworkRoles = make(map[models.NetworkID]map[models.UserRoleID]struct{})		}	}	logic.UpsertUser(user)}
 |