mirror of
https://github.com/gravitl/netmaker.git
synced 2025-11-01 04:32:40 +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