ソースを参照

add host node model to auto relay info

abhishek9686 6 日 前
コミット
d1e040aa4b
3 ファイル変更69 行追加39 行削除
  1. 25 18
      logic/peers.go
  2. 26 21
      models/mqtt.go
  3. 18 0
      pro/controllers/auto_relay.go

+ 25 - 18
logic/peers.go

@@ -162,8 +162,8 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 		HostNetworkInfo: models.HostInfoMap{},
 		ServerConfig:    GetServerInfo(),
 		DnsNameservers:  GetNameserversForHost(host),
-		AutoRelayNodes:  make(map[models.NetworkID][]models.Node),
-		GwNodes:         make(map[models.NetworkID][]models.Node),
+		AutoRelayNodes:  make(map[models.NetworkID][]models.HostNode),
+		GwNodes:         make(map[models.NetworkID][]models.HostNode),
 	}
 	if host.DNS == "no" {
 		hostPeerUpdate.ManageDNS = false
@@ -326,6 +326,28 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 			if peer.IsIngressGateway {
 				hostPeerUpdate.EgressRoutes = append(hostPeerUpdate.EgressRoutes, getExtpeersExtraRoutes(node)...)
 			}
+			var allowedToComm bool
+			if defaultDevicePolicy.Enabled {
+				allowedToComm = true
+			} else {
+				allowedToComm = IsPeerAllowed(node, peer, false)
+			}
+			if allowedToComm {
+				if peer.IsAutoRelay {
+					hostPeerUpdate.AutoRelayNodes[models.NetworkID(peer.Network)] = append(hostPeerUpdate.AutoRelayNodes[models.NetworkID(peer.Network)],
+						models.HostNode{
+							Node: peer,
+							Host: *peerHost,
+						})
+				}
+				if node.AutoAssignGateway && peer.IsGw {
+					hostPeerUpdate.GwNodes[models.NetworkID(peer.Network)] = append(hostPeerUpdate.GwNodes[models.NetworkID(peer.Network)],
+						models.HostNode{
+							Node: peer,
+							Host: *peerHost,
+						})
+				}
+			}
 
 			if (node.IsRelayed && node.RelayedBy != peer.ID.String()) ||
 				(peer.IsRelayed && peer.RelayedBy != node.ID.String()) || isFailOverPeer || isAutoRelayPeer {
@@ -395,12 +417,7 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 			if uselocal {
 				peerConfig.Endpoint.Port = peerHost.ListenPort
 			}
-			var allowedToComm bool
-			if defaultDevicePolicy.Enabled {
-				allowedToComm = true
-			} else {
-				allowedToComm = IsPeerAllowed(node, peer, false)
-			}
+
 			if peer.Action != models.NODE_DELETE &&
 				!peer.PendingDelete &&
 				peer.Connected &&
@@ -409,16 +426,6 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 				(deletedNode == nil || (peer.ID.String() != deletedNode.ID.String())) {
 				peerConfig.AllowedIPs = GetAllowedIPs(&node, &peer, nil) // only append allowed IPs if valid connection
 			}
-			if len(peerConfig.AllowedIPs) > 0 {
-				if peer.IsAutoRelay {
-					hostPeerUpdate.AutoRelayNodes[models.NetworkID(peer.Network)] = append(hostPeerUpdate.AutoRelayNodes[models.NetworkID(peer.Network)],
-						peer)
-				}
-				if node.AutoAssignGateway && peer.IsGw {
-					hostPeerUpdate.GwNodes[models.NetworkID(peer.Network)] = append(hostPeerUpdate.GwNodes[models.NetworkID(peer.Network)],
-						peer)
-				}
-			}
 			var nodePeer wgtypes.PeerConfig
 			if _, ok := peerIndexMap[peerHost.PublicKey.String()]; !ok {
 				hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, peerConfig)

+ 26 - 21
models/mqtt.go

@@ -12,31 +12,36 @@ type HostPeerInfo struct {
 
 // HostPeerUpdate - struct for host peer updates
 type HostPeerUpdate struct {
-	Host              Host                  `json:"host"`
-	Nodes             []Node                `json:"nodes"`
-	ChangeDefaultGw   bool                  `json:"change_default_gw"`
-	DefaultGwIp       net.IP                `json:"default_gw_ip"`
-	IsInternetGw      bool                  `json:"is_inet_gw"`
-	NodeAddrs         []net.IPNet           `json:"nodes_addrs"`
-	Server            string                `json:"server"`
-	ServerVersion     string                `json:"serverversion"`
-	ServerAddrs       []ServerAddr          `json:"serveraddrs"`
-	NodePeers         []wgtypes.PeerConfig  `json:"node_peers"`
-	Peers             []wgtypes.PeerConfig  `json:"host_peers"`
-	PeerIDs           PeerMap               `json:"peerids"`
-	HostNetworkInfo   HostInfoMap           `json:"host_network_info,omitempty"`
-	EgressRoutes      []EgressNetworkRoutes `json:"egress_network_routes"`
-	FwUpdate          FwUpdate              `json:"fw_update"`
-	ReplacePeers      bool                  `json:"replace_peers"`
-	NameServers       []string              `json:"name_servers"`
-	DnsNameservers    []Nameserver          `json:"dns_nameservers"`
-	EgressWithDomains []EgressDomain        `json:"egress_with_domains"`
-	AutoRelayNodes    map[NetworkID][]Node  `json:"auto_relay_nodes"`
-	GwNodes           map[NetworkID][]Node  `json:"gw_nodes"`
+	Host              Host                     `json:"host"`
+	Nodes             []Node                   `json:"nodes"`
+	ChangeDefaultGw   bool                     `json:"change_default_gw"`
+	DefaultGwIp       net.IP                   `json:"default_gw_ip"`
+	IsInternetGw      bool                     `json:"is_inet_gw"`
+	NodeAddrs         []net.IPNet              `json:"nodes_addrs"`
+	Server            string                   `json:"server"`
+	ServerVersion     string                   `json:"serverversion"`
+	ServerAddrs       []ServerAddr             `json:"serveraddrs"`
+	NodePeers         []wgtypes.PeerConfig     `json:"node_peers"`
+	Peers             []wgtypes.PeerConfig     `json:"host_peers"`
+	PeerIDs           PeerMap                  `json:"peerids"`
+	HostNetworkInfo   HostInfoMap              `json:"host_network_info,omitempty"`
+	EgressRoutes      []EgressNetworkRoutes    `json:"egress_network_routes"`
+	FwUpdate          FwUpdate                 `json:"fw_update"`
+	ReplacePeers      bool                     `json:"replace_peers"`
+	NameServers       []string                 `json:"name_servers"`
+	DnsNameservers    []Nameserver             `json:"dns_nameservers"`
+	EgressWithDomains []EgressDomain           `json:"egress_with_domains"`
+	AutoRelayNodes    map[NetworkID][]HostNode `json:"auto_relay_nodes"`
+	GwNodes           map[NetworkID][]HostNode `json:"gw_nodes"`
 	ServerConfig
 	OldPeerUpdateFields
 }
 
+type HostNode struct {
+	Host Host `json:"host"`
+	Node Node `json:"node"`
+}
+
 type EgressDomain struct {
 	ID     string `json:"id"`
 	Node   Node   `json:"node"`

+ 18 - 0
pro/controllers/auto_relay.go

@@ -373,6 +373,24 @@ func autoRelayMEUpdate(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
 		return
 	}
+	if autoRelayReq.AutoRelayGwID == "" {
+		// unset current gw
+		if node.RelayedBy != "" {
+			// unset relayed node from the curr relay
+			currRelayNode, err := logic.GetNodeByID(node.RelayedBy)
+			if err == nil {
+				newRelayedNodes := logic.RemoveAllFromSlice(currRelayNode.RelayedNodes, node.ID.String())
+				logic.UpdateRelayNodes(currRelayNode.ID.String(), currRelayNode.RelayedNodes, newRelayedNodes)
+			}
+		}
+		allNodes, err := logic.GetAllNodes()
+		if err == nil {
+			mq.PublishSingleHostPeerUpdate(host, allNodes, nil, nil, false, nil)
+		}
+		go mq.PublishPeerUpdate(false)
+		logic.ReturnSuccessResponse(w, r, "unrelayed successfully")
+		return
+	}
 	autoRelayNode, err := logic.GetNodeByID(autoRelayReq.AutoRelayGwID)
 	if err != nil {
 		logic.ReturnErrorResponse(