Kaynağa Gözat

add additional validation checks on egress req

abhishek9686 4 ay önce
ebeveyn
işleme
caae689995
2 değiştirilmiş dosya ile 23 ekleme ve 11 silme
  1. 3 1
      controllers/egress.go
  2. 20 10
      logic/egress.go

+ 3 - 1
controllers/egress.go

@@ -162,7 +162,6 @@ func updateEgress(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
 		return
 	}
-
 	var updateNat bool
 	var updateInetGw bool
 	var updateStatus bool
@@ -183,6 +182,9 @@ func updateEgress(w http.ResponseWriter, r *http.Request) {
 	e.Range = egressRange
 	e.Description = req.Description
 	e.Name = req.Name
+	e.Nat = req.Nat
+	e.Status = req.Status
+	e.IsInetGw = req.IsInetGw
 	e.UpdatedAt = time.Now().UTC()
 	if !logic.ValidateEgressReq(&e) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("invalid egress request"), "badrequest"))

+ 20 - 10
logic/egress.go

@@ -36,15 +36,16 @@ func ValidateEgressReq(e *schema.Egress) bool {
 			return false
 		}
 		req := models.InetNodeReq{}
-		if len(e.Nodes) > 0 {
-			for k := range e.Nodes {
-				inetNode, err := GetNodeByID(k)
-				if err != nil {
-					return false
-				}
-				if ValidateInetGwReq(inetNode, req, false) != nil {
-					return false
-				}
+
+		for k := range e.Nodes {
+			inetNode, err := GetNodeByID(k)
+			if err != nil {
+				return false
+			}
+			// check if node is acting as egress gw already
+			GetNodeEgressInfo(&inetNode)
+			if err := ValidateInetGwReq(inetNode, req, false); err != nil {
+				return false
 			}
 
 		}
@@ -52,10 +53,19 @@ func ValidateEgressReq(e *schema.Egress) bool {
 	}
 	if len(e.Nodes) != 0 {
 		for k := range e.Nodes {
-			_, err := GetNodeByID(k)
+			egressNode, err := GetNodeByID(k)
 			if err != nil {
 				return false
 			}
+			GetNodeEgressInfo(&egressNode)
+			if egressNode.InternetGwID != "" {
+				return false
+			}
+			if e.IsInetGw {
+				if egressNode.IsInternetGateway {
+					return false
+				}
+			}
 		}
 	}
 	return true