|
@@ -1,14 +1,17 @@
|
|
|
package logic
|
|
|
|
|
|
import (
|
|
|
+ "context"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"net"
|
|
|
|
|
|
"github.com/google/uuid"
|
|
|
+ "github.com/gravitl/netmaker/db"
|
|
|
"github.com/gravitl/netmaker/logger"
|
|
|
"github.com/gravitl/netmaker/logic/acls/nodeacls"
|
|
|
"github.com/gravitl/netmaker/models"
|
|
|
+ "github.com/gravitl/netmaker/schema"
|
|
|
)
|
|
|
|
|
|
// GetRelays - gets all the nodes that are relays
|
|
@@ -109,12 +112,13 @@ func ValidateRelay(relay models.RelayRequest, update bool) error {
|
|
|
if !update && node.IsRelay {
|
|
|
return errors.New("node is already acting as a relay")
|
|
|
}
|
|
|
+ eli, _ := (&schema.Egress{Network: node.Network}).ListByNetwork(db.WithContext(context.TODO()))
|
|
|
for _, relayedNodeID := range relay.RelayedNodes {
|
|
|
relayedNode, err := GetNodeByID(relayedNodeID)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- GetNodeEgressInfo(&relayedNode)
|
|
|
+ GetNodeEgressInfo(&relayedNode, eli)
|
|
|
if relayedNode.IsIngressGateway {
|
|
|
return errors.New("cannot relay an ingress gateway (" + relayedNodeID + ")")
|
|
|
}
|
|
@@ -186,6 +190,7 @@ func DeleteRelay(network, nodeid string) ([]models.Node, models.Node, error) {
|
|
|
|
|
|
func RelayedAllowedIPs(peer, node *models.Node) []net.IPNet {
|
|
|
var allowedIPs = []net.IPNet{}
|
|
|
+ eli, _ := (&schema.Egress{Network: node.Network}).ListByNetwork(db.WithContext(context.TODO()))
|
|
|
for _, relayedNodeID := range peer.RelayedNodes {
|
|
|
if node.ID.String() == relayedNodeID {
|
|
|
continue
|
|
@@ -194,7 +199,7 @@ func RelayedAllowedIPs(peer, node *models.Node) []net.IPNet {
|
|
|
if err != nil {
|
|
|
continue
|
|
|
}
|
|
|
- GetNodeEgressInfo(&relayedNode)
|
|
|
+ GetNodeEgressInfo(&relayedNode, eli)
|
|
|
allowed := getRelayedAddresses(relayedNodeID)
|
|
|
if relayedNode.EgressDetails.IsEgressGateway {
|
|
|
allowed = append(allowed, GetEgressIPs(&relayedNode)...)
|
|
@@ -218,6 +223,7 @@ func GetAllowedIpsForRelayed(relayed, relay *models.Node) (allowedIPs []net.IPNe
|
|
|
logger.Log(0, "error getting network clients", err.Error())
|
|
|
return
|
|
|
}
|
|
|
+ eli, _ := (&schema.Egress{Network: relay.Network}).ListByNetwork(db.WithContext(context.TODO()))
|
|
|
for _, peer := range peers {
|
|
|
if peer.ID == relayed.ID || peer.ID == relay.ID {
|
|
|
continue
|
|
@@ -225,7 +231,7 @@ func GetAllowedIpsForRelayed(relayed, relay *models.Node) (allowedIPs []net.IPNe
|
|
|
if !IsPeerAllowed(*relayed, peer, true) {
|
|
|
continue
|
|
|
}
|
|
|
- GetNodeEgressInfo(&peer)
|
|
|
+ GetNodeEgressInfo(&peer, eli)
|
|
|
if nodeacls.AreNodesAllowed(nodeacls.NetworkID(relayed.Network), nodeacls.NodeID(relayed.ID.String()), nodeacls.NodeID(peer.ID.String())) {
|
|
|
allowedIPs = append(allowedIPs, GetAllowedIPs(relayed, &peer, nil)...)
|
|
|
}
|