mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 04:06:37 +08:00 
			
		
		
		
	add validation check for tags
This commit is contained in:
		| @@ -42,40 +42,59 @@ func IsAclPolicyValid(acl models.Acl) bool { | ||||
| 			if len(userTagLi) < 2 { | ||||
| 				break | ||||
| 			} | ||||
| 			if userTagLi[0] != models.UserAcl.String() && | ||||
| 				userTagLi[0] != models.UserGroupAcl.String() { | ||||
| 			if userTagLi[0] != models.UserAclID.String() && | ||||
| 				userTagLi[0] != models.UserGroupAclID.String() { | ||||
| 				break | ||||
| 			} | ||||
| 			// check if user group is valid | ||||
| 			if userTagLi[0] == models.UserAclID.String() { | ||||
| 				_, err := GetUser(userTagLi[1]) | ||||
| 				if err != nil { | ||||
| 					break | ||||
| 				} | ||||
| 			} else if userTagLi[0] == models.UserGroupAclID.String() { | ||||
| 				err := IsGroupValid(models.UserGroupID(userTagLi[1])) | ||||
| 				if err != nil { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 		} | ||||
| 		for _, dstI := range acl.Dst { | ||||
| 			dstILi := strings.Split(dstI, ":") | ||||
| 			if len(dstILi) < 2 { | ||||
| 				break | ||||
| 			} | ||||
| 			if dstILi[0] == models.UserAcl.String() || | ||||
| 				dstILi[0] == models.UserGroupAcl.String() { | ||||
| 			if dstILi[0] == models.UserAclID.String() || | ||||
| 				dstILi[0] == models.UserGroupAclID.String() { | ||||
| 				break | ||||
| 			} | ||||
| 			if dstILi[0] != models.DeviceAclID.String() { | ||||
| 				break | ||||
| 			} | ||||
| 			// check if tag is valid | ||||
| 			_, err := GetTag(models.TagID(dstILi[1])) | ||||
| 			if err != nil { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		isValid = true | ||||
| 	case models.DevicePolicy: | ||||
| 		for _, srcI := range acl.Src { | ||||
| 			userTagLi := strings.Split(srcI, ":") | ||||
| 			if len(userTagLi) < 2 { | ||||
| 			deviceTagLi := strings.Split(srcI, ":") | ||||
| 			if len(deviceTagLi) < 2 { | ||||
| 				break | ||||
| 			} | ||||
| 			if userTagLi[0] == models.UserAcl.String() || | ||||
| 				userTagLi[0] == models.UserGroupAcl.String() { | ||||
| 			if deviceTagLi[0] != models.DeviceAclID.String() { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		for _, dstI := range acl.Dst { | ||||
| 			dstILi := strings.Split(dstI, ":") | ||||
| 			if len(dstILi) < 2 { | ||||
| 			deviceTagLi := strings.Split(dstI, ":") | ||||
| 			if len(deviceTagLi) < 2 { | ||||
| 				break | ||||
| 			} | ||||
| 			if dstILi[0] == models.UserAcl.String() || | ||||
| 				dstILi[0] == models.UserGroupAcl.String() { | ||||
| 			if deviceTagLi[0] != models.DeviceAclID.String() { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -39,6 +39,9 @@ var FilterNetworksByRole = func(allnetworks []models.Network, user models.User) | ||||
| var IsGroupsValid = func(groups map[models.UserGroupID]struct{}) error { | ||||
| 	return nil | ||||
| } | ||||
| var IsGroupValid = func(groupID models.UserGroupID) error { | ||||
| 	return nil | ||||
| } | ||||
| var IsNetworkRolesValid = func(networkRoles map[models.NetworkID]map[models.UserRoleID]struct{}) error { | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -26,8 +26,11 @@ const ( | ||||
| type AclGroupType string | ||||
|  | ||||
| const ( | ||||
| 	UserAcl      AclGroupType = "user" | ||||
| 	UserGroupAcl AclGroupType = "user-group" | ||||
| 	UserAclID                AclGroupType = "user" | ||||
| 	UserGroupAclID           AclGroupType = "user-group" | ||||
| 	DeviceAclID              AclGroupType = "tag" | ||||
| 	NetmakerIPAclID          AclGroupType = "ip" | ||||
| 	NetmakerSubNetRangeAClID AclGroupType = "ipset" | ||||
| ) | ||||
|  | ||||
| func (g AclGroupType) String() string { | ||||
|   | ||||
| @@ -130,6 +130,7 @@ func InitPro() { | ||||
| 	logic.CreateDefaultNetworkRolesAndGroups = proLogic.CreateDefaultNetworkRolesAndGroups | ||||
| 	logic.FilterNetworksByRole = proLogic.FilterNetworksByRole | ||||
| 	logic.IsGroupsValid = proLogic.IsGroupsValid | ||||
| 	logic.IsGroupValid = proLogic.IsGroupValid | ||||
| 	logic.IsNetworkRolesValid = proLogic.IsNetworkRolesValid | ||||
| 	logic.InitialiseRoles = proLogic.UserRolesInit | ||||
| 	logic.UpdateUserGwAccess = proLogic.UpdateUserGwAccess | ||||
|   | ||||
| @@ -789,6 +789,16 @@ func IsGroupsValid(groups map[models.UserGroupID]struct{}) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func IsGroupValid(groupID models.UserGroupID) error { | ||||
|  | ||||
| 	_, err := GetUserGroup(groupID) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("user group `%s` not found", groupID) | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func IsNetworkRolesValid(networkRoles map[models.NetworkID]map[models.UserRoleID]struct{}) error { | ||||
| 	for netID, netRoles := range networkRoles { | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 abhishek9686
					abhishek9686