mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
normalize cidr on network/egress gateway creation
This commit is contained in:
@@ -14,6 +14,14 @@ import (
|
|||||||
|
|
||||||
// CreateEgressGateway - creates an egress gateway
|
// CreateEgressGateway - creates an egress gateway
|
||||||
func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, error) {
|
func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, error) {
|
||||||
|
for i, cidr := range gateway.Ranges {
|
||||||
|
normalized, err := NormalizeCIDR(cidr)
|
||||||
|
if err != nil {
|
||||||
|
return models.Node{}, nil
|
||||||
|
}
|
||||||
|
gateway.Ranges[i] = normalized
|
||||||
|
|
||||||
|
}
|
||||||
node, err := GetNodeByID(gateway.NodeID)
|
node, err := GetNodeByID(gateway.NodeID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Node{}, err
|
return models.Node{}, err
|
||||||
|
@@ -70,6 +70,20 @@ func DeleteNetwork(network string) error {
|
|||||||
// CreateNetwork - creates a network in database
|
// CreateNetwork - creates a network in database
|
||||||
func CreateNetwork(network models.Network) (models.Network, error) {
|
func CreateNetwork(network models.Network) (models.Network, error) {
|
||||||
|
|
||||||
|
if network.AddressRange != "" {
|
||||||
|
normalizedRange, err := NormalizeCIDR(network.AddressRange)
|
||||||
|
if err != nil {
|
||||||
|
return models.Network{}, err
|
||||||
|
}
|
||||||
|
network.AddressRange = normalizedRange
|
||||||
|
}
|
||||||
|
if network.AddressRange6 != "" {
|
||||||
|
normalizedRange, err := NormalizeCIDR(network.AddressRange6)
|
||||||
|
if err != nil {
|
||||||
|
return models.Network{}, err
|
||||||
|
}
|
||||||
|
network.AddressRange6 = normalizedRange
|
||||||
|
}
|
||||||
network.SetDefaults()
|
network.SetDefaults()
|
||||||
network.SetNodesLastModified()
|
network.SetNodesLastModified()
|
||||||
network.SetNetworkLastModified()
|
network.SetNetworkLastModified()
|
||||||
|
@@ -13,6 +13,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/c-robinson/iplib"
|
||||||
"github.com/gravitl/netmaker/database"
|
"github.com/gravitl/netmaker/database"
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
@@ -169,3 +170,19 @@ func ShouldPublishPeerPorts(serverNode *models.Node) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NormalCidr - returns the first address of CIDR
|
||||||
|
func NormalizeCIDR(address string) (string, error) {
|
||||||
|
ip, IPNet, err := net.ParseCIDR(address)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if ip.To4() == nil {
|
||||||
|
net6 := iplib.Net6FromStr(IPNet.String())
|
||||||
|
IPNet.IP = net6.FirstAddress()
|
||||||
|
} else {
|
||||||
|
net4 := iplib.Net4FromStr(IPNet.String())
|
||||||
|
IPNet.IP = net4.FirstAddress()
|
||||||
|
}
|
||||||
|
return IPNet.String(), nil
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user