mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 20:22:44 +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 { | 			if len(userTagLi) < 2 { | ||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
| 			if userTagLi[0] != models.UserAcl.String() && | 			if userTagLi[0] != models.UserAclID.String() && | ||||||
| 				userTagLi[0] != models.UserGroupAcl.String() { | 				userTagLi[0] != models.UserGroupAclID.String() { | ||||||
| 				break | 				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 { | 		for _, dstI := range acl.Dst { | ||||||
| 			dstILi := strings.Split(dstI, ":") | 			dstILi := strings.Split(dstI, ":") | ||||||
| 			if len(dstILi) < 2 { | 			if len(dstILi) < 2 { | ||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
| 			if dstILi[0] == models.UserAcl.String() || | 			if dstILi[0] == models.UserAclID.String() || | ||||||
| 				dstILi[0] == models.UserGroupAcl.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 | 				break | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		isValid = true | 		isValid = true | ||||||
| 	case models.DevicePolicy: | 	case models.DevicePolicy: | ||||||
| 		for _, srcI := range acl.Src { | 		for _, srcI := range acl.Src { | ||||||
| 			userTagLi := strings.Split(srcI, ":") | 			deviceTagLi := strings.Split(srcI, ":") | ||||||
| 			if len(userTagLi) < 2 { | 			if len(deviceTagLi) < 2 { | ||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
| 			if userTagLi[0] == models.UserAcl.String() || | 			if deviceTagLi[0] != models.DeviceAclID.String() { | ||||||
| 				userTagLi[0] == models.UserGroupAcl.String() { |  | ||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		for _, dstI := range acl.Dst { | 		for _, dstI := range acl.Dst { | ||||||
| 			dstILi := strings.Split(dstI, ":") | 			deviceTagLi := strings.Split(dstI, ":") | ||||||
| 			if len(dstILi) < 2 { | 			if len(deviceTagLi) < 2 { | ||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
| 			if dstILi[0] == models.UserAcl.String() || | 			if deviceTagLi[0] != models.DeviceAclID.String() { | ||||||
| 				dstILi[0] == models.UserGroupAcl.String() { |  | ||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -39,6 +39,9 @@ var FilterNetworksByRole = func(allnetworks []models.Network, user models.User) | |||||||
| var IsGroupsValid = func(groups map[models.UserGroupID]struct{}) error { | var IsGroupsValid = func(groups map[models.UserGroupID]struct{}) error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  | var IsGroupValid = func(groupID models.UserGroupID) error { | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
| var IsNetworkRolesValid = func(networkRoles map[models.NetworkID]map[models.UserRoleID]struct{}) error { | var IsNetworkRolesValid = func(networkRoles map[models.NetworkID]map[models.UserRoleID]struct{}) error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|   | |||||||
| @@ -26,8 +26,11 @@ const ( | |||||||
| type AclGroupType string | type AclGroupType string | ||||||
|  |  | ||||||
| const ( | const ( | ||||||
| 	UserAcl      AclGroupType = "user" | 	UserAclID                AclGroupType = "user" | ||||||
| 	UserGroupAcl AclGroupType = "user-group" | 	UserGroupAclID           AclGroupType = "user-group" | ||||||
|  | 	DeviceAclID              AclGroupType = "tag" | ||||||
|  | 	NetmakerIPAclID          AclGroupType = "ip" | ||||||
|  | 	NetmakerSubNetRangeAClID AclGroupType = "ipset" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func (g AclGroupType) String() string { | func (g AclGroupType) String() string { | ||||||
|   | |||||||
| @@ -130,6 +130,7 @@ func InitPro() { | |||||||
| 	logic.CreateDefaultNetworkRolesAndGroups = proLogic.CreateDefaultNetworkRolesAndGroups | 	logic.CreateDefaultNetworkRolesAndGroups = proLogic.CreateDefaultNetworkRolesAndGroups | ||||||
| 	logic.FilterNetworksByRole = proLogic.FilterNetworksByRole | 	logic.FilterNetworksByRole = proLogic.FilterNetworksByRole | ||||||
| 	logic.IsGroupsValid = proLogic.IsGroupsValid | 	logic.IsGroupsValid = proLogic.IsGroupsValid | ||||||
|  | 	logic.IsGroupValid = proLogic.IsGroupValid | ||||||
| 	logic.IsNetworkRolesValid = proLogic.IsNetworkRolesValid | 	logic.IsNetworkRolesValid = proLogic.IsNetworkRolesValid | ||||||
| 	logic.InitialiseRoles = proLogic.UserRolesInit | 	logic.InitialiseRoles = proLogic.UserRolesInit | ||||||
| 	logic.UpdateUserGwAccess = proLogic.UpdateUserGwAccess | 	logic.UpdateUserGwAccess = proLogic.UpdateUserGwAccess | ||||||
|   | |||||||
| @@ -789,6 +789,16 @@ func IsGroupsValid(groups map[models.UserGroupID]struct{}) error { | |||||||
| 	return nil | 	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 { | func IsNetworkRolesValid(networkRoles map[models.NetworkID]map[models.UserRoleID]struct{}) error { | ||||||
| 	for netID, netRoles := range networkRoles { | 	for netID, netRoles := range networkRoles { | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 abhishek9686
					abhishek9686