Ver código fonte

disallow node acting using inet gw to act as inet gw

abhishek9686 1 ano atrás
pai
commit
331ef1acb9
2 arquivos alterados com 12 adições e 5 exclusões
  1. 2 2
      pro/controllers/inet_gws.go
  2. 10 3
      pro/logic/nodes.go

+ 2 - 2
pro/controllers/inet_gws.go

@@ -60,7 +60,7 @@ func createInternetGw(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("only linux nodes can be made internet gws"), "badrequest"))
 		return
 	}
-	err = proLogic.ValidateInetGwReq(node, request)
+	err = proLogic.ValidateInetGwReq(node, request, false)
 	if err != nil {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
 		return
@@ -109,7 +109,7 @@ func updateInternetGw(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node is not a internet gw"), "badrequest"))
 		return
 	}
-	err = proLogic.ValidateInetGwReq(node, request)
+	err = proLogic.ValidateInetGwReq(node, request, true)
 	if err != nil {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
 		return

+ 10 - 3
pro/logic/nodes.go

@@ -10,7 +10,7 @@ import (
 	"golang.org/x/exp/slog"
 )
 
-func ValidateInetGwReq(inetNode models.Node, req models.InetNodeReq) error {
+func ValidateInetGwReq(inetNode models.Node, req models.InetNodeReq, update bool) error {
 	for _, clientNodeID := range req.InetNodeClientIDs {
 		clientNode, err := logic.GetNodeByID(clientNodeID)
 		if err != nil {
@@ -26,9 +26,16 @@ func ValidateInetGwReq(inetNode models.Node, req models.InetNodeReq) error {
 		if clientNode.IsInternetGateway {
 			return fmt.Errorf("node %s acting as internet gateway cannot use another internet gateway", clientHost.Name)
 		}
-		if clientNode.InternetGwID != "" && clientNode.InternetGwID != inetNode.ID.String() {
-			return fmt.Errorf("node %s is already using a internet gateway", clientHost.Name)
+		if update {
+			if clientNode.InternetGwID != "" && clientNode.InternetGwID != inetNode.ID.String() {
+				return fmt.Errorf("node %s is already using a internet gateway", clientHost.Name)
+			}
+		} else {
+			if clientNode.InternetGwID != "" {
+				return fmt.Errorf("node %s is already using a internet gateway", clientHost.Name)
+			}
 		}
+
 		if clientNode.IsRelayed {
 			return fmt.Errorf("node %s is being relayed", clientHost.Name)
 		}