add validation check for tags

This commit is contained in:
abhishek9686
2024-09-25 13:01:40 +04:00
parent 630928b4f7
commit 00b082d11c
5 changed files with 50 additions and 14 deletions

View File

@@ -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
} }
} }

View File

@@ -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
} }

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {