Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions controllers/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@ func createGateway(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
if req.IsInternetGateway {
if host.DNS != "yes" {
host.DNS = "yes"
logic.UpsertHost(host)
}
}
for _, relayedNodeID := range relayNode.RelayedNodes {
relayedNode, err := logic.GetNodeByID(relayedNodeID)
if err == nil {
Expand Down
13 changes: 13 additions & 0 deletions controllers/hosts.go
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,19 @@ func updateHost(w http.ResponseWriter, r *http.Request) {
newHost := newHostData.ConvertAPIHostToNMHost(currHost)

logic.UpdateHost(newHost, currHost) // update the in memory struct values
if newHost.DNS != "yes" {
// check if any node is internet gw
for _, nodeID := range newHost.Nodes {
node, err := logic.GetNodeByID(nodeID)
if err != nil {
continue
}
if node.IsInternetGateway {
newHost.DNS = "yes"
break
}
}
}
if err = logic.UpsertHost(newHost); err != nil {
logger.Log(0, r.Header.Get("user"), "failed to update a host:", err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
Expand Down
6 changes: 6 additions & 0 deletions controllers/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,12 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
if newNode.IsInternetGateway {
if host.DNS != "yes" {
host.DNS = "yes"
logic.UpsertHost(host)
}
}
aclUpdate := currentNode.DefaultACL != newNode.DefaultACL

err = logic.UpdateNode(&currentNode, newNode)
Expand Down
4 changes: 0 additions & 4 deletions logic/acls/nodeacls/retrieve.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,12 @@ import (
"sync"

"github.com/gravitl/netmaker/logic/acls"
"github.com/gravitl/netmaker/servercfg"
)

var NodesAllowedACLMutex = &sync.Mutex{}

// AreNodesAllowed - checks if nodes are allowed to communicate in their network ACL
func AreNodesAllowed(networkID NetworkID, node1, node2 NodeID) bool {
if !servercfg.IsOldAclEnabled() {
return true
}
NodesAllowedACLMutex.Lock()
defer NodesAllowedACLMutex.Unlock()
var currentNetworkACL, err = FetchAllACLs(networkID)
Expand Down
5 changes: 3 additions & 2 deletions logic/peers.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ func GetHostPeerInfo(host *models.Host) (models.HostPeerInfo, error) {
if err != nil {
return peerInfo, err
}
serverInfo := GetServerInfo()
for _, nodeID := range host.Nodes {
nodeID := nodeID
node, err := GetNodeByID(nodeID)
Expand Down Expand Up @@ -108,7 +109,7 @@ func GetHostPeerInfo(host *models.Host) (models.HostPeerInfo, error) {
if peer.Action != models.NODE_DELETE &&
!peer.PendingDelete &&
peer.Connected &&
nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID.String()), nodeacls.NodeID(peer.ID.String())) &&
(!serverInfo.OldAClsSupport || nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID.String()), nodeacls.NodeID(peer.ID.String()))) &&
(allowedToComm) {

networkPeersInfo[peerHost.PublicKey.String()] = models.IDandAddr{
Expand Down Expand Up @@ -424,7 +425,7 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
if peer.Action != models.NODE_DELETE &&
!peer.PendingDelete &&
peer.Connected &&
nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID.String()), nodeacls.NodeID(peer.ID.String())) &&
(!hostPeerUpdate.ServerConfig.OldAClsSupport || nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID.String()), nodeacls.NodeID(peer.ID.String()))) &&
(allowedToComm) &&
(deletedNode == nil || (peer.ID.String() != deletedNode.ID.String())) {
peerConfig.AllowedIPs = GetAllowedIPs(&node, &peer, nil) // only append allowed IPs if valid connection
Expand Down
3 changes: 2 additions & 1 deletion logic/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ func GetAllowedIpsForRelayed(relayed, relay *models.Node) (allowedIPs []net.IPNe
logger.Log(0, "error getting network clients", err.Error())
return
}
serverSettings := GetServerSettings()
acls, _ := ListAclsByNetwork(models.NetworkID(relay.Network))
eli, _ := (&schema.Egress{Network: relay.Network}).ListByNetwork(db.WithContext(context.TODO()))
defaultPolicy, _ := GetDefaultPolicy(models.NetworkID(relay.Network), models.DevicePolicy)
Expand All @@ -253,7 +254,7 @@ func GetAllowedIpsForRelayed(relayed, relay *models.Node) (allowedIPs []net.IPNe
continue
}
AddEgressInfoToPeerByAccess(relayed, &peer, eli, acls, defaultPolicy.Enabled)
if nodeacls.AreNodesAllowed(nodeacls.NetworkID(relayed.Network), nodeacls.NodeID(relayed.ID.String()), nodeacls.NodeID(peer.ID.String())) {
if !serverSettings.OldAClsSupport || nodeacls.AreNodesAllowed(nodeacls.NetworkID(relayed.Network), nodeacls.NodeID(relayed.ID.String()), nodeacls.NodeID(peer.ID.String())) {
allowedIPs = append(allowedIPs, GetAllowedIPs(relayed, &peer, nil)...)
}
}
Expand Down
1 change: 1 addition & 0 deletions logic/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ func GetServerInfo() models.ServerConfig {
cfg.DefaultDomain = serverSettings.DefaultDomain
cfg.EndpointDetection = serverSettings.EndpointDetection
cfg.PeerConnectionCheckInterval = serverSettings.PeerConnectionCheckInterval
cfg.OldAClsSupport = serverSettings.OldAClsSupport
key, _ := RetrievePublicTrafficKey()
cfg.TrafficKey = key
return cfg
Expand Down
1 change: 1 addition & 0 deletions models/structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ type ServerConfig struct {
EndpointDetection bool `yaml:"endpoint_detection"`
DefaultDomain string `yaml:"default_domain"`
PeerConnectionCheckInterval string `yaml:"peer_connection_check_interval"`
OldAClsSupport bool `json:"-"`
}

// User.NameInCharset - returns if name is in charset below or not
Expand Down