Browse Source

moved relay to host level, peer updates with relay configuration for host

Abhishek Kondur 2 years ago
parent
commit
6385527d01
4 changed files with 46 additions and 121 deletions
  1. 0 55
      go.mod
  2. 37 66
      logic/peers.go
  3. 4 0
      models/host.go
  4. 5 0
      models/structs.go

+ 0 - 55
go.mod

@@ -51,64 +51,9 @@ require (
 )
 )
 
 
 require (
 require (
-	github.com/Microsoft/go-winio v0.5.2 // indirect
-	github.com/bep/debounce v1.2.1 // indirect
-	github.com/cloverstd/tcping v0.1.1 // indirect
-	github.com/devilcove/httpclient v0.6.0 // indirect
-	github.com/docker/distribution v2.8.1+incompatible // indirect
-	github.com/docker/docker v20.10.17+incompatible // indirect
-	github.com/docker/go-connections v0.4.0 // indirect
-	github.com/docker/go-units v0.4.0 // indirect
-	github.com/fsnotify/fsnotify v1.5.4 // indirect
-	github.com/go-ole/go-ole v1.2.6 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/google/gopacket v1.1.19 // indirect
-	github.com/guumaster/hostctl v1.1.3 // indirect
-	github.com/hashicorp/hcl v1.0.0 // indirect
-	github.com/imdario/mergo v0.3.12 // indirect
 	github.com/inconshreveable/mousetrap v1.0.1 // indirect
 	github.com/inconshreveable/mousetrap v1.0.1 // indirect
-	github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect
-	github.com/kr/pretty v0.3.1 // indirect
-	github.com/kr/text v0.2.0 // indirect
-	github.com/labstack/echo/v4 v4.9.0 // indirect
-	github.com/labstack/gommon v0.3.1 // indirect
-	github.com/leaanthony/go-ansi-parser v1.0.1 // indirect
-	github.com/leaanthony/gosod v1.0.3 // indirect
-	github.com/leaanthony/slicer v1.5.0 // indirect
-	github.com/magiconair/properties v1.8.6 // indirect
-	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
-	github.com/mitchellh/mapstructure v1.5.0 // indirect
-	github.com/opencontainers/go-digest v1.0.0 // indirect
-	github.com/opencontainers/image-spec v1.0.2 // indirect
-	github.com/pelletier/go-toml v1.9.5 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.5 // indirect
-	github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
-	github.com/rogpeppe/go-internal v1.9.0 // indirect
-	github.com/samber/lo v1.27.1 // indirect
-	github.com/spf13/afero v1.9.2 // indirect
-	github.com/spf13/cast v1.5.0 // indirect
-	github.com/spf13/jwalterweatherman v1.1.0 // indirect
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/spf13/pflag v1.0.5 // indirect
-	github.com/spf13/viper v1.13.0 // indirect
-	github.com/subosito/gotenv v1.4.1 // indirect
-	github.com/tkrajina/go-reflector v0.5.5 // indirect
-	github.com/valyala/bytebufferpool v1.0.0 // indirect
-	github.com/valyala/fasttemplate v1.2.1 // indirect
-	github.com/vishvananda/netlink v1.1.0 // indirect
-	github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df // indirect
-	github.com/wailsapp/mimetype v1.4.1 // indirect
-	github.com/wailsapp/wails/v2 v2.2.0 // indirect
-	golang.design/x/clipboard v0.6.3 // indirect
-	golang.org/x/exp/shiny v0.0.0-20221208044002-44028be4359e // indirect
-	golang.org/x/image v0.0.0-20220601225756-64ec528b34cd // indirect
-	golang.org/x/mobile v0.0.0-20211207041440-4e6c2922fdee // indirect
-	golang.org/x/term v0.2.0 // indirect
-	golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224 // indirect
-	golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
-	gopkg.in/ini.v1 v1.67.0 // indirect
-	gopkg.in/yaml.v2 v2.4.0 // indirect
 )
 )
 
 
 require (
 require (

+ 37 - 66
logic/peers.go

@@ -198,65 +198,41 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
 		Action: proxy_models.ProxyUpdate,
 		Action: proxy_models.ProxyUpdate,
 	}
 	}
 	peerConfMap := make(map[string]proxy_models.PeerConf)
 	peerConfMap := make(map[string]proxy_models.PeerConf)
+	if host.IsRelayed {
+		relayHost, err := GetHost(host.RelayedBy)
+		if err == nil {
+			relayEndpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, host.LocalListenPort))
+			if err != nil {
+				logger.Log(1, "failed to resolve relay node endpoint: ", err.Error())
+			}
+			proxyPayload.IsRelayed = true
+			proxyPayload.RelayedTo = relayEndpoint
+		} else {
+			logger.Log(0, "couldn't find relay host for:  ", host.ID.String())
+		}
+
+	}
+	if host.IsRelay {
+		relayedHosts := GetRelayedHosts(host)
+		relayPeersMap := make(map[string]proxy_models.RelayedConf)
+		for _, relayedHost := range relayedHosts {
+			payload, err := GetPeerUpdateForHost(&relayedHost)
+			if err == nil {
+				relayedEndpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayedHost.EndpointIP, host.LocalListenPort))
+				if udpErr == nil {
+					relayPeersMap[host.PublicKey.String()] = proxy_models.RelayedConf{
+						RelayedPeerEndpoint: relayedEndpoint,
+						RelayedPeerPubKey:   relayedHost.PublicKey.String(),
+						Peers:               payload.Peers,
+					}
+				}
+
+			}
+		}
+		proxyPayload.IsRelay = true
+		proxyPayload.RelayedPeerConf = relayPeersMap
 
 
-	// ** TODO - RELAY NEEDS TO BE FIXED
-	// if !onlyPeers {
-	// 	if node.IsRelayed {
-	// 		relayNode := FindRelay(node)
-	// 		relayHost, err := GetHost(relayNode.HostID.String())
-	// 		if err != nil {
-	// 			return proxyPayload, err
-	// 		}
-	// 		if relayNode != nil {
-	// 			host, err := GetHost(relayNode.HostID.String())
-	// 			if err != nil {
-	// 				logger.Log(0, "error retrieving host for relay node", relayNode.HostID.String(), err.Error())
-	// 			}
-	// 			relayEndpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, host.LocalListenPort))
-	// 			if err != nil {
-	// 				logger.Log(1, "failed to resolve relay node endpoint: ", err.Error())
-	// 			}
-	// 			proxyPayload.IsRelayed = true
-	// 			proxyPayload.RelayedTo = relayEndpoint
-	// 		} else {
-	// 			logger.Log(0, "couldn't find relay node for:  ", node.ID.String())
-	// 		}
-
-	// 	}
-	// 	if node.IsRelay {
-	// 		host, err := GetHost(node.HostID.String())
-	// 		if err != nil {
-	// 			logger.Log(0, "error retrieving host for relay node", node.ID.String(), err.Error())
-	// 		}
-	// 		relayedNodes, err := GetRelayedNodes(node)
-	// 		if err != nil {
-	// 			logger.Log(1, "failed to relayed nodes: ", node.ID.String(), err.Error())
-	// 			proxyPayload.IsRelay = false
-	// 		} else {
-	// 			relayPeersMap := make(map[string]proxy_models.RelayedConf)
-	// 			for _, relayedNode := range relayedNodes {
-	// 				payload, err := GetPeersForProxy(&relayedNode, true)
-	// 				if err == nil {
-	// 					relayedHost, err := GetHost(relayedNode.HostID.String())
-	// 					if err != nil {
-	// 						logger.Log(0, "error retrieving host for relayNode", relayedNode.ID.String(), err.Error())
-	// 					}
-	// 					relayedEndpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayedHost.EndpointIP, host.LocalListenPort))
-	// 					if udpErr == nil {
-	// 						relayPeersMap[host.PublicKey.String()] = proxy_models.RelayedConf{
-	// 							RelayedPeerEndpoint: relayedEndpoint,
-	// 							RelayedPeerPubKey:   relayedHost.PublicKey.String(),
-	// 							Peers:               payload.Peers,
-	// 						}
-	// 					}
-
-	// 				}
-	// 			}
-	// 			proxyPayload.IsRelay = true
-	// 			proxyPayload.RelayedPeerConf = relayPeersMap
-	// 		}
-	// 	}
-	// }
+	}
 
 
 	for _, nodeID := range host.Nodes {
 	for _, nodeID := range host.Nodes {
 
 
@@ -299,14 +275,9 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
 				Address: net.ParseIP(peer.PrimaryAddress()),
 				Address: net.ParseIP(peer.PrimaryAddress()),
 			}
 			}
 
 
-			if peer.IsRelayed {
-				relayNode := FindRelay(&peer)
-				if relayNode != nil {
-					relayHost, err := GetHost(relayNode.HostID.String())
-					if err != nil {
-						logger.Log(0, "error retrieving host for relayNode", relayNode.ID.String(), err.Error())
-						continue
-					}
+			if peerHost.IsRelayed {
+				relayHost, err := GetHost(peerHost.RelayedBy)
+				if err == nil {
 					relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, relayHost.LocalListenPort))
 					relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, relayHost.LocalListenPort))
 					if err == nil {
 					if err == nil {
 						peerConfMap[peerHost.PublicKey.String()] = proxy_models.PeerConf{
 						peerConfMap[peerHost.PublicKey.String()] = proxy_models.PeerConf{

+ 4 - 0
models/host.go

@@ -34,6 +34,10 @@ type Host struct {
 	TrafficKeyPublic []byte           `json:"traffickeypublic" yaml:"trafficekeypublic"`
 	TrafficKeyPublic []byte           `json:"traffickeypublic" yaml:"trafficekeypublic"`
 	InternetGateway  net.UDPAddr      `json:"internetgateway" yaml:"internetgateway"`
 	InternetGateway  net.UDPAddr      `json:"internetgateway" yaml:"internetgateway"`
 	Nodes            []string         `json:"nodes" yaml:"nodes"`
 	Nodes            []string         `json:"nodes" yaml:"nodes"`
+	IsRelayed        bool             `json:"isrelayed" bson:"isrelayed" yaml:"isrelayed"`
+	RelayedBy        string           `json:"relayed_by" bson:"relayed_by" yaml:"relayed_by"`
+	IsRelay          bool             `json:"isrelay" bson:"isrelay" yaml:"isrelay"`
+	RelayedHosts     []string         `json:"relay_hosts" bson:"relay_hosts" yaml:"relay_hosts"`
 	Interfaces       []Iface          `json:"interfaces" yaml:"interfaces"`
 	Interfaces       []Iface          `json:"interfaces" yaml:"interfaces"`
 	EndpointIP       net.IP           `json:"endpointip" yaml:"endpointip"`
 	EndpointIP       net.IP           `json:"endpointip" yaml:"endpointip"`
 	ProxyEnabled     bool             `json:"proxy_enabled" yaml:"proxy_enabled"`
 	ProxyEnabled     bool             `json:"proxy_enabled" yaml:"proxy_enabled"`

+ 5 - 0
models/structs.go

@@ -172,6 +172,11 @@ type RelayRequest struct {
 	RelayAddrs []string `json:"relayaddrs" bson:"relayaddrs"`
 	RelayAddrs []string `json:"relayaddrs" bson:"relayaddrs"`
 }
 }
 
 
+type HostRelayRequest struct {
+	HostID       string   `json:"host_id" bson:"host_id"`
+	RelayedHosts []string `json:"relayed_hosts" bson:"relayed_hosts"`
+}
+
 // ServerUpdateData - contains data to configure server
 // ServerUpdateData - contains data to configure server
 // and if it should set peers
 // and if it should set peers
 type ServerUpdateData struct {
 type ServerUpdateData struct {