Browse Source

redacted server local ip get

0xdcarns 3 years ago
parent
commit
3a43f32f8c
1 changed files with 26 additions and 7 deletions
  1. 26 7
      logic/server.go

+ 26 - 7
logic/server.go

@@ -51,14 +51,11 @@ func ServerJoin(networkSettings *models.Network, serverID string) error {
 	}
 
 	if node.LocalRange != "" && node.LocalAddress == "" {
-		logger.Log(1, "local vpn, getting local address from range:", node.LocalRange)
-		node.LocalAddress = GetLocalIP(*node)
-		var _, currentCIDR, cidrErr = net.ParseCIDR(node.LocalRange)
-		if cidrErr != nil {
-			return err
-		}
-		if !currentCIDR.Contains(net.IP(node.LocalAddress)) {
+		logger.Log(1, "local vpn, getting local address from range:", networkSettings.LocalRange)
+		node.LocalAddress, err = getServerLocalIP(networkSettings)
+		if err != nil {
 			node.LocalAddress = ""
+			node.IsLocal = "no"
 		}
 	}
 
@@ -432,3 +429,25 @@ func checkNodeActions(node *models.Node) string {
 	}
 	return ""
 }
+
+func getServerLocalIP(networkSettings *models.Network) (string, error) {
+
+	var networkCIDR = networkSettings.LocalRange
+	var currentAddresses, _ = net.InterfaceAddrs()
+	var _, currentCIDR, cidrErr = net.ParseCIDR(networkCIDR)
+	if cidrErr != nil {
+		logger.Log(1, "error on server local IP, invalid CIDR provided:", networkCIDR)
+		return "", cidrErr
+	}
+	for _, addr := range currentAddresses {
+		ip, _, err := net.ParseCIDR(addr.String())
+		if err != nil {
+			continue
+		}
+		if currentCIDR.Contains(ip) {
+			logger.Log(1, "found local ip on network,", networkSettings.NetID, ", set to", ip.String())
+			return ip.String(), nil
+		}
+	}
+	return "", errors.New("could not find a local ip for server")
+}