Jelajahi Sumber

fix egress range comparison

abhishek9686 6 bulan lalu
induk
melakukan
2cb5519978
1 mengubah file dengan 20 tambahan dan 15 penghapusan
  1. 20 15
      logic/gateway.go

+ 20 - 15
logic/gateway.go

@@ -3,6 +3,8 @@ package logic
 import (
 	"errors"
 	"fmt"
+	"slices"
+	"sort"
 	"time"
 
 	"github.com/gravitl/netmaker/database"
@@ -99,19 +101,6 @@ func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, erro
 		gateway.Ranges[i] = normalized
 
 	}
-	if gateway.NatEnabled == "" {
-		gateway.NatEnabled = "yes"
-	}
-	err = ValidateEgressGateway(gateway)
-	if err != nil {
-		return models.Node{}, err
-	}
-	if gateway.Ranges == nil {
-		gateway.Ranges = make([]string, 0)
-	}
-	node.IsEgressGateway = true
-	node.EgressGatewayRanges = gateway.Ranges
-	node.EgressGatewayNatEnabled = models.ParseBool(gateway.NatEnabled)
 	rangesWithMetric := []string{}
 	for i := len(gateway.RangesWithMetric) - 1; i >= 0; i-- {
 		if gateway.RangesWithMetric[i].Network == "0.0.0.0/0" || gateway.RangesWithMetric[i].Network == "::/0" {
@@ -119,7 +108,7 @@ func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, erro
 			gateway.RangesWithMetric = append(gateway.RangesWithMetric[:i], gateway.RangesWithMetric[i+1:]...)
 			continue
 		}
-		normalized, err := NormalizeCIDR(gateway.Ranges[i])
+		normalized, err := NormalizeCIDR(gateway.RangesWithMetric[i].Network)
 		if err != nil {
 			return models.Node{}, err
 		}
@@ -129,9 +118,25 @@ func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, erro
 			gateway.RangesWithMetric[i].RouteMetric = 256
 		}
 	}
-	if !IsSlicesEqual(node.EgressGatewayRanges, rangesWithMetric) {
+	sort.Strings(gateway.Ranges)
+	sort.Strings(rangesWithMetric)
+	if !slices.Equal(gateway.Ranges, rangesWithMetric) {
 		return models.Node{}, errors.New("invalid ranges")
 	}
+	if gateway.NatEnabled == "" {
+		gateway.NatEnabled = "yes"
+	}
+	err = ValidateEgressGateway(gateway)
+	if err != nil {
+		return models.Node{}, err
+	}
+	if gateway.Ranges == nil {
+		gateway.Ranges = make([]string, 0)
+	}
+	node.IsEgressGateway = true
+	node.EgressGatewayRanges = gateway.Ranges
+	node.EgressGatewayNatEnabled = models.ParseBool(gateway.NatEnabled)
+
 	node.EgressGatewayRequest = gateway // store entire request for use when preserving the egress gateway
 	node.SetLastModified()
 	if err = UpsertNode(&node); err != nil {