2
0
Эх сурвалжийг харах

fix policy validity checker for inet gws

abhishek9686 3 сар өмнө
parent
commit
c0a8cdb63d
3 өөрчлөгдсөн 34 нэмэгдсэн , 7 устгасан
  1. 11 2
      logic/acls.go
  2. 9 3
      models/api_node.go
  3. 14 2
      pro/logic/acls.go

+ 11 - 2
logic/acls.go

@@ -350,14 +350,23 @@ func checkIfAclTagisValid(a models.Acl, t models.AclPolicyTag, isSrc bool) (err
 			req := models.InetNodeReq{}
 			for _, srcI := range a.Src {
 				if srcI.ID == models.NodeID {
-					req.InetNodeClientIDs = append(req.InetNodeClientIDs, srcI.Value)
+					_, nodeErr := GetNodeByID(srcI.Value)
+					if nodeErr != nil {
+						_, staticNodeErr := GetExtClient(srcI.Value, a.NetworkID.String())
+						if staticNodeErr != nil {
+							return errors.New("invalid node " + srcI.Value)
+						}
+					} else {
+						req.InetNodeClientIDs = append(req.InetNodeClientIDs, srcI.Value)
+					}
+
 				}
 			}
 			if len(e.Nodes) > 0 {
 				for k := range e.Nodes {
 					inetNode, err := GetNodeByID(k)
 					if err != nil {
-						return errors.New("invalid node " + t.Value)
+						return errors.New("invalid node " + k)
 					}
 					if err = ValidateInetGwReq(inetNode, req, false); err != nil {
 						return err

+ 9 - 3
models/api_node.go

@@ -32,6 +32,7 @@ type ApiNode struct {
 	NetworkRange6                 string              `json:"networkrange6"`
 	IsRelayed                     bool                `json:"isrelayed"`
 	IsRelay                       bool                `json:"isrelay"`
+	IsGw                          bool                `json:"is_gw"`
 	RelayedBy                     string              `json:"relayedby" bson:"relayedby" yaml:"relayedby"`
 	RelayedNodes                  []string            `json:"relaynodes" yaml:"relayedNodes"`
 	IsEgressGateway               bool                `json:"isegressgateway"`
@@ -72,14 +73,14 @@ func (a *ApiNode) ConvertToServerNode(currentNode *Node) *Node {
 	convertedNode.Connected = a.Connected
 	convertedNode.ID, _ = uuid.Parse(a.ID)
 	convertedNode.HostID, _ = uuid.Parse(a.HostID)
-	convertedNode.IsRelay = a.IsRelay
+	//convertedNode.IsRelay = a.IsRelay
 	convertedNode.IsRelayed = a.IsRelayed
 	convertedNode.RelayedBy = a.RelayedBy
 	convertedNode.RelayedNodes = a.RelayedNodes
 	convertedNode.PendingDelete = a.PendingDelete
 	convertedNode.FailedOverBy = currentNode.FailedOverBy
 	convertedNode.FailOverPeers = currentNode.FailOverPeers
-	convertedNode.IsIngressGateway = a.IsIngressGateway
+	//convertedNode.IsIngressGateway = a.IsIngressGateway
 	convertedNode.IngressGatewayRange = currentNode.IngressGatewayRange
 	convertedNode.IngressGatewayRange6 = currentNode.IngressGatewayRange6
 	convertedNode.DNSOn = a.DNSOn
@@ -132,7 +133,11 @@ func (a *ApiNode) ConvertToServerNode(currentNode *Node) *Node {
 		convertedNode.AdditionalRagIps = append(convertedNode.AdditionalRagIps, ragIp)
 	}
 	convertedNode.Tags = a.Tags
-	convertedNode.IsGw = currentNode.IsGw
+	convertedNode.IsGw = a.IsGw
+	if convertedNode.IsGw {
+		convertedNode.IsRelay = true
+		convertedNode.IsIngressGateway = true
+	}
 	return &convertedNode
 }
 
@@ -181,6 +186,7 @@ func (nm *Node) ConvertToAPINode() *ApiNode {
 	}
 	apiNode.IsRelayed = nm.IsRelayed
 	apiNode.IsRelay = nm.IsRelay
+	apiNode.IsGw = nm.IsGw
 	apiNode.RelayedBy = nm.RelayedBy
 	apiNode.RelayedNodes = nm.RelayedNodes
 	apiNode.IsIngressGateway = nm.IsIngressGateway

+ 14 - 2
pro/logic/acls.go

@@ -7,6 +7,7 @@ import (
 	"net"
 	"sort"
 
+	"github.com/google/uuid"
 	"github.com/gravitl/netmaker/db"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
@@ -416,10 +417,21 @@ func checkIfAclTagisValid(a models.Acl, t models.AclPolicyTag, isSrc bool) (err
 				if srcI.ID == models.NodeTagID {
 					nodesMap := GetNodesWithTag(models.TagID(srcI.Value))
 					for _, node := range nodesMap {
-						req.InetNodeClientIDs = append(req.InetNodeClientIDs, node.ID.String())
+						if node.ID != uuid.Nil {
+							req.InetNodeClientIDs = append(req.InetNodeClientIDs, node.ID.String())
+						}
 					}
 				} else if srcI.ID == models.NodeID {
-					req.InetNodeClientIDs = append(req.InetNodeClientIDs, srcI.Value)
+					_, nodeErr := logic.GetNodeByID(srcI.Value)
+					if nodeErr != nil {
+						_, staticNodeErr := logic.GetExtClient(srcI.Value, a.NetworkID.String())
+						if staticNodeErr != nil {
+							return errors.New("invalid node " + srcI.Value)
+						}
+					} else {
+						req.InetNodeClientIDs = append(req.InetNodeClientIDs, srcI.Value)
+					}
+
 				}
 			}
 			if len(e.Nodes) > 0 {