mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 00:17:13 +08:00 
			
		
		
		
	changed logs
This commit is contained in:
		
							parent
							
								
									1c521934ba
								
							
						
					
					
						commit
						382901b124
					
				
					 17 changed files with 82 additions and 126 deletions
				
			
		|  | @ -73,10 +73,6 @@ func readConfig() *EnvironmentConfig { | ||||||
| 	f, err := os.Open(file) | 	f, err := os.Open(file) | ||||||
| 	var cfg EnvironmentConfig | 	var cfg EnvironmentConfig | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		//log.Fatal(err) |  | ||||||
| 		//os.Exit(2) |  | ||||||
| 		//log.Println("Unable to open config file at config/environments/" + getEnv()) |  | ||||||
| 		//log.Println("Will proceed with defaults or enironment variables (no config file).") |  | ||||||
| 		return &cfg | 		return &cfg | ||||||
| 	} | 	} | ||||||
| 	defer f.Close() | 	defer f.Close() | ||||||
|  |  | ||||||
|  | @ -2,11 +2,9 @@ package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"log" |  | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 |  | ||||||
| 	"github.com/gravitl/netmaker/database" | 	"github.com/gravitl/netmaker/database" | ||||||
| 	"github.com/gravitl/netmaker/functions" | 	"github.com/gravitl/netmaker/functions" | ||||||
| 	"github.com/gravitl/netmaker/models" | 	"github.com/gravitl/netmaker/models" | ||||||
|  | @ -23,20 +21,19 @@ func GetPeersList(networkName string) ([]models.Node, error) { | ||||||
| 		if database.IsEmptyRecord(err) { | 		if database.IsEmptyRecord(err) { | ||||||
| 			return peers, nil | 			return peers, nil | ||||||
| 		} | 		} | ||||||
| 		log.Println(err) | 		functions.PrintUserLog("",err.Error(),2) | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	udppeers, errN := database.GetPeers(networkName) | 	udppeers, errN := database.GetPeers(networkName) | ||||||
| 	if errN != nil { | 	if errN != nil { | ||||||
| 		log.Println("failed to collect udp peers") | 		functions.PrintUserLog("",errN.Error(),2) | ||||||
| 		log.Println(errN) |  | ||||||
| 	} | 	} | ||||||
| 	for _, value := range collection { | 	for _, value := range collection { | ||||||
| 		var node models.Node | 		var node models.Node | ||||||
| 		var peer models.Node | 		var peer models.Node | ||||||
| 		err := json.Unmarshal([]byte(value), &node) | 		err := json.Unmarshal([]byte(value), &node) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			log.Println(err) | 			functions.PrintUserLog("",err.Error(),2) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		if node.IsEgressGateway == "yes" { // handle egress stuff | 		if node.IsEgressGateway == "yes" { // handle egress stuff | ||||||
|  | @ -62,7 +59,7 @@ func GetPeersList(networkName string) ([]models.Node, error) { | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			functions.PrintUserLog("netmaker", "sending peer "+peer.MacAddress+" "+peer.Endpoint, 2) | 			functions.PrintUserLog(models.NODE_SERVER_NAME, "sending peer "+peer.MacAddress+" "+peer.Endpoint, 2) | ||||||
| 			peers = append(peers, peer) | 			peers = append(peers, peer) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -87,12 +84,12 @@ func GetExtPeersList(macaddress string, networkName string) ([]models.ExtPeersRe | ||||||
| 		var extClient models.ExtClient | 		var extClient models.ExtClient | ||||||
| 		err = json.Unmarshal([]byte(value), &peer) | 		err = json.Unmarshal([]byte(value), &peer) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			functions.PrintUserLog("netmaker", "failed to unmarshal peer", 2) | 			functions.PrintUserLog(models.NODE_SERVER_NAME, "failed to unmarshal peer", 2) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		err = json.Unmarshal([]byte(value), &extClient) | 		err = json.Unmarshal([]byte(value), &extClient) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			functions.PrintUserLog("netmaker", "failed to unmarshal ext client", 2) | 			functions.PrintUserLog(models.NODE_SERVER_NAME, "failed to unmarshal ext client", 2) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		if extClient.Network == networkName && extClient.IngressGatewayID == macaddress { | 		if extClient.Network == networkName && extClient.IngressGatewayID == macaddress { | ||||||
|  | @ -125,7 +122,7 @@ func DeleteNode(key string, exterminate bool) error { | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		if err := database.DeleteRecord(database.DELETED_NODES_TABLE_NAME, key); err != nil { | 		if err := database.DeleteRecord(database.DELETED_NODES_TABLE_NAME, key); err != nil { | ||||||
| 			log.Println(err) | 			functions.PrintUserLog("",err.Error(),2) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if err := database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil { | 	if err := database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil { | ||||||
|  | @ -197,6 +194,12 @@ func CreateNode(node models.Node, networkName string) (models.Node, error) { | ||||||
| 
 | 
 | ||||||
| 	node.Network = networkName | 	node.Network = networkName | ||||||
| 
 | 
 | ||||||
|  | 	if node.Name == models.NODE_SERVER_NAME { | ||||||
|  | 		if node.CheckIsServer() { | ||||||
|  | 			node.IsServer = "yes" | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	node.SetDefaults() | 	node.SetDefaults() | ||||||
| 	node.Address, err = functions.UniqueAddress(networkName) | 	node.Address, err = functions.UniqueAddress(networkName) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -216,7 +219,6 @@ func CreateNode(node models.Node, networkName string) (models.Node, error) { | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return node, err | 		return node, err | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	key, err := functions.GetRecordKey(node.MacAddress, node.Network) | 	key, err := functions.GetRecordKey(node.MacAddress, node.Network) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return node, err | 		return node, err | ||||||
|  | @ -242,12 +244,11 @@ func CreateNode(node models.Node, networkName string) (models.Node, error) { | ||||||
| func SetNetworkServerPeers(networkName string) { | func SetNetworkServerPeers(networkName string) { | ||||||
| 	if currentPeersList, err := serverctl.GetPeers(networkName); err == nil { | 	if currentPeersList, err := serverctl.GetPeers(networkName); err == nil { | ||||||
| 		if database.SetPeers(currentPeersList, networkName) { | 		if database.SetPeers(currentPeersList, networkName) { | ||||||
| 			log.Println("set new peers on network", networkName) | 			functions.PrintUserLog(models.NODE_SERVER_NAME,"set new peers on network "+networkName,1) | ||||||
| 		} else { |  | ||||||
| 			log.Println("attempted to set peers on network", networkName) |  | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		log.Println("could not set server peers on network", networkName) | 		functions.PrintUserLog(models.NODE_SERVER_NAME,"could not set peers on network "+networkName,1) | ||||||
|  | 		functions.PrintUserLog(models.NODE_SERVER_NAME,err.Error(),1) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,7 +7,6 @@ import ( | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| 	"sync" | 	"sync" | ||||||
| 
 |  | ||||||
| 	"github.com/gorilla/handlers" | 	"github.com/gorilla/handlers" | ||||||
| 	"github.com/gorilla/mux" | 	"github.com/gorilla/mux" | ||||||
| 	"github.com/gravitl/netmaker/servercfg" | 	"github.com/gravitl/netmaker/servercfg" | ||||||
|  |  | ||||||
|  | @ -2,10 +2,7 @@ package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" |  | ||||||
| 	"log" |  | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 
 |  | ||||||
| 	"github.com/go-playground/validator/v10" | 	"github.com/go-playground/validator/v10" | ||||||
| 	"github.com/gorilla/mux" | 	"github.com/gorilla/mux" | ||||||
| 	"github.com/gravitl/netmaker/database" | 	"github.com/gravitl/netmaker/database" | ||||||
|  | @ -319,7 +316,7 @@ func deleteDNS(w http.ResponseWriter, r *http.Request) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	entrytext := params["domain"] + "." + params["network"] | 	entrytext := params["domain"] + "." + params["network"] | ||||||
| 	functions.PrintUserLog("netmaker", "deleted dns entry: "+entrytext, 1) | 	functions.PrintUserLog(models.NODE_SERVER_NAME, "deleted dns entry: "+entrytext, 1) | ||||||
| 	err = SetDNS() | 	err = SetDNS() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
|  | @ -401,7 +398,7 @@ func pushDNS(w http.ResponseWriter, r *http.Request) { | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	log.Println("pushed DNS updates to nameserver") | 	functions.PrintUserLog(r.Header.Get("user"),"pushed DNS updates to nameserver",1) | ||||||
| 	json.NewEncoder(w).Encode("DNS Pushed to CoreDNS") | 	json.NewEncoder(w).Encode("DNS Pushed to CoreDNS") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -422,7 +419,7 @@ func ValidateDNSCreate(entry models.DNSEntry) error { | ||||||
| 	err := v.Struct(entry) | 	err := v.Struct(entry) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		for _, e := range err.(validator.ValidationErrors) { | 		for _, e := range err.(validator.ValidationErrors) { | ||||||
| 			fmt.Println(e) | 			functions.PrintUserLog("", e.Error(),1) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return err | 	return err | ||||||
|  | @ -442,7 +439,9 @@ func ValidateDNSUpdate(change models.DNSEntry, entry models.DNSEntry) error { | ||||||
| 	}) | 	}) | ||||||
| 	_ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool { | 	_ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool { | ||||||
| 		_, err := functions.GetParentNetwork(change.Network) | 		_, err := functions.GetParentNetwork(change.Network) | ||||||
| 		fmt.Println(err, entry.Network) | 		if err != nil { | ||||||
|  | 			functions.PrintUserLog("",err.Error(),0) | ||||||
|  | 		} | ||||||
| 		return err == nil | 		return err == nil | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
|  | @ -464,7 +463,7 @@ func ValidateDNSUpdate(change models.DNSEntry, entry models.DNSEntry) error { | ||||||
| 
 | 
 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		for _, e := range err.(validator.ValidationErrors) { | 		for _, e := range err.(validator.ValidationErrors) { | ||||||
| 			fmt.Println(e) | 			functions.PrintUserLog("", e.Error(),1) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return err | 	return err | ||||||
|  |  | ||||||
|  | @ -6,12 +6,9 @@ import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io" | 	"io" | ||||||
| 	"math/rand" | 	"math/rand" | ||||||
| 
 |  | ||||||
| 	// "fmt" |  | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"time" | 	"time" | ||||||
| 
 |  | ||||||
| 	"github.com/gorilla/mux" | 	"github.com/gorilla/mux" | ||||||
| 	"github.com/gravitl/netmaker/database" | 	"github.com/gravitl/netmaker/database" | ||||||
| 	"github.com/gravitl/netmaker/functions" | 	"github.com/gravitl/netmaker/functions" | ||||||
|  | @ -31,43 +28,6 @@ func extClientHandlers(r *mux.Router) { | ||||||
| 	r.HandleFunc("/api/extclients/{network}/{macaddress}", securityCheck(false, http.HandlerFunc(createExtClient))).Methods("POST") | 	r.HandleFunc("/api/extclients/{network}/{macaddress}", securityCheck(false, http.HandlerFunc(createExtClient))).Methods("POST") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // TODO: Implement Validation |  | ||||||
| func ValidateExtClientCreate(networkName string, extclient models.ExtClient) error { |  | ||||||
| 	// 	v := validator.New() |  | ||||||
| 	// 	_ = v.RegisterValidation("macaddress_unique", func(fl validator.FieldLevel) bool { |  | ||||||
| 	// 		var isFieldUnique bool = functions.IsFieldUnique(networkName, "macaddress", extclient.MacAddress) |  | ||||||
| 	// 		return isFieldUnique |  | ||||||
| 	// 	}) |  | ||||||
| 	// 	_ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool { |  | ||||||
| 	// 		_, err := extclient.GetNetwork() |  | ||||||
| 	// 		return err == nil |  | ||||||
| 	// 	}) |  | ||||||
| 	// 	err := v.Struct(extclient) |  | ||||||
| 
 |  | ||||||
| 	// 	if err != nil { |  | ||||||
| 	// 		for _, e := range err.(validator.ValidationErrors) { |  | ||||||
| 	// 			fmt.Println(e) |  | ||||||
| 	// 		} |  | ||||||
| 	// 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // TODO: Implement Validation |  | ||||||
| func ValidateExtClientUpdate(networkName string, extclient models.ExtClient) error { |  | ||||||
| 	// v := validator.New() |  | ||||||
| 	// _ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool { |  | ||||||
| 	// 	_, err := extclient.GetNetwork() |  | ||||||
| 	// 	return err == nil |  | ||||||
| 	// }) |  | ||||||
| 	// err := v.Struct(extclient) |  | ||||||
| 	// if err != nil { |  | ||||||
| 	// 	for _, e := range err.(validator.ValidationErrors) { |  | ||||||
| 	// 		fmt.Println(e) |  | ||||||
| 	// 	} |  | ||||||
| 	// } |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func checkIngressExists(network string, macaddress string) bool { | func checkIngressExists(network string, macaddress string) bool { | ||||||
| 	node, err := functions.GetNodeByMacAddress(network, macaddress) | 	node, err := functions.GetNodeByMacAddress(network, macaddress) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -178,14 +138,14 @@ func getExtClientConf(w http.ResponseWriter, r *http.Request) { | ||||||
| 
 | 
 | ||||||
| 	gwnode, err := functions.GetNodeByMacAddress(client.Network, client.IngressGatewayID) | 	gwnode, err := functions.GetNodeByMacAddress(client.Network, client.IngressGatewayID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Println("Could not retrieve Ingress Gateway Node " + client.IngressGatewayID) | 		functions.PrintUserLog(r.Header.Get("user"),"Could not retrieve Ingress Gateway Node " + client.IngressGatewayID,1) | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	network, err := functions.GetParentNetwork(client.Network) | 	network, err := functions.GetParentNetwork(client.Network) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Println("Could not retrieve Ingress Gateway Network " + client.Network) | 		functions.PrintUserLog(r.Header.Get("user"),"Could not retrieve Ingress Gateway Network " + client.Network,1) | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  | @ -238,7 +198,7 @@ Endpoint = %s | ||||||
| 		} | 		} | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 	functions.PrintUserLog(r.Header.Get("user"),"retrieved ext client config",2) | ||||||
| 	w.WriteHeader(http.StatusOK) | 	w.WriteHeader(http.StatusOK) | ||||||
| 	json.NewEncoder(w).Encode(client) | 	json.NewEncoder(w).Encode(client) | ||||||
| } | } | ||||||
|  | @ -263,9 +223,7 @@ func CreateExtClient(extclient models.ExtClient) error { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if extclient.ClientID == "" { | 	if extclient.ClientID == "" { | ||||||
| 		clientid := StringWithCharset(7, charset) | 		extclient.ClientID = models.GenerateNodeName() | ||||||
| 		clientname := "client-" + clientid |  | ||||||
| 		extclient.ClientID = clientname |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	extclient.LastModified = time.Now().Unix() | 	extclient.LastModified = time.Now().Unix() | ||||||
|  | @ -284,10 +242,10 @@ func CreateExtClient(extclient models.ExtClient) error { | ||||||
| 	err = SetNetworkNodesLastModified(extclient.Network) | 	err = SetNetworkNodesLastModified(extclient.Network) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | /** | ||||||
| //This one's a doozy |  * To create a extclient | ||||||
| //To create a extclient |  * Must have valid key and be unique | ||||||
| //Must have valid key and be unique |  */ | ||||||
| func createExtClient(w http.ResponseWriter, r *http.Request) { | func createExtClient(w http.ResponseWriter, r *http.Request) { | ||||||
| 	w.Header().Set("Content-Type", "application/json") | 	w.Header().Set("Content-Type", "application/json") | ||||||
| 
 | 
 | ||||||
|  | @ -295,9 +253,6 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { | ||||||
| 
 | 
 | ||||||
| 	networkName := params["network"] | 	networkName := params["network"] | ||||||
| 	macaddress := params["macaddress"] | 	macaddress := params["macaddress"] | ||||||
| 	//Check if network exists  first |  | ||||||
| 	//TODO: This is inefficient. Let's find a better way. |  | ||||||
| 	//Just a few rows down we grab the network anyway |  | ||||||
| 	ingressExists := checkIngressExists(networkName, macaddress) | 	ingressExists := checkIngressExists(networkName, macaddress) | ||||||
| 	if !ingressExists { | 	if !ingressExists { | ||||||
| 		returnErrorResponse(w, r, formatError(errors.New("ingress does not exist"), "internal")) | 		returnErrorResponse(w, r, formatError(errors.New("ingress does not exist"), "internal")) | ||||||
|  | @ -319,11 +274,6 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	err = ValidateExtClientCreate(params["network"], extclient) |  | ||||||
| 	if err != nil { |  | ||||||
| 		returnErrorResponse(w, r, formatError(err, "badrequest")) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	err = CreateExtClient(extclient) | 	err = CreateExtClient(extclient) | ||||||
| 
 | 
 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -340,14 +290,8 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { | ||||||
| 
 | 
 | ||||||
| 	var newExtClient models.ExtClient | 	var newExtClient models.ExtClient | ||||||
| 	var oldExtClient models.ExtClient | 	var oldExtClient models.ExtClient | ||||||
| 	// we decode our body request params |  | ||||||
| 	_ = json.NewDecoder(r.Body).Decode(&newExtClient) | 	_ = json.NewDecoder(r.Body).Decode(&newExtClient) | ||||||
| 	// TODO: Validation for update. | 
 | ||||||
| 	// err := ValidateExtClientUpdate(params["network"], params["clientid"], newExtClient) |  | ||||||
| 	// if err != nil { |  | ||||||
| 	// 	returnErrorResponse(w, r, formatError(err, "badrequest")) |  | ||||||
| 	// 	return |  | ||||||
| 	// } |  | ||||||
| 	key, err := functions.GetRecordKey(params["clientid"], params["network"]) | 	key, err := functions.GetRecordKey(params["clientid"], params["network"]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
|  | @ -362,7 +306,6 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	newclient, err := UpdateExtClient(newExtClient.ClientID, params["network"], oldExtClient) | 	newclient, err := UpdateExtClient(newExtClient.ClientID, params["network"], oldExtClient) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		returnErrorResponse(w, r, formatError(err, "internal")) | 		returnErrorResponse(w, r, formatError(err, "internal")) | ||||||
|  | @ -404,7 +347,7 @@ func DeleteGatewayExtClients(gatewayID string, networkName string) error { | ||||||
| 	for _, extClient := range currentExtClients { | 	for _, extClient := range currentExtClients { | ||||||
| 		if extClient.IngressGatewayID == gatewayID { | 		if extClient.IngressGatewayID == gatewayID { | ||||||
| 			if err = DeleteExtClient(networkName, extClient.ClientID); err != nil { | 			if err = DeleteExtClient(networkName, extClient.ClientID); err != nil { | ||||||
| 				functions.PrintUserLog("netmaker", "failed to remove ext client "+extClient.ClientID, 2) | 				functions.PrintUserLog(models.NODE_SERVER_NAME, "failed to remove ext client "+extClient.ClientID, 2) | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -4,11 +4,9 @@ import ( | ||||||
| 	"encoding/base64" | 	"encoding/base64" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"log" |  | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 |  | ||||||
| 	"github.com/go-playground/validator/v10" | 	"github.com/go-playground/validator/v10" | ||||||
| 	"github.com/gorilla/mux" | 	"github.com/gorilla/mux" | ||||||
| 	"github.com/gravitl/netmaker/database" | 	"github.com/gravitl/netmaker/database" | ||||||
|  | @ -181,7 +179,7 @@ func ValidateNetworkUpdate(network models.Network) error { | ||||||
| 
 | 
 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		for _, e := range err.(validator.ValidationErrors) { | 		for _, e := range err.(validator.ValidationErrors) { | ||||||
| 			log.Println(e) | 			functions.PrintUserLog("validator",e.Error(),1) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return err | 	return err | ||||||
|  | @ -517,7 +515,7 @@ func CreateAccessKey(accesskey models.AccessKey, network models.Network) (models | ||||||
| 	err = v.Struct(accesskey) | 	err = v.Struct(accesskey) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		for _, e := range err.(validator.ValidationErrors) { | 		for _, e := range err.(validator.ValidationErrors) { | ||||||
| 			log.Println(e) | 			functions.PrintUserLog("validator",e.Error(),1) | ||||||
| 		} | 		} | ||||||
| 		return models.AccessKey{}, err | 		return models.AccessKey{}, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -4,9 +4,7 @@ import ( | ||||||
| 	"context" | 	"context" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"log" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 |  | ||||||
| 	"github.com/gravitl/netmaker/functions" | 	"github.com/gravitl/netmaker/functions" | ||||||
| 	nodepb "github.com/gravitl/netmaker/grpc" | 	nodepb "github.com/gravitl/netmaker/grpc" | ||||||
| 	"github.com/gravitl/netmaker/models" | 	"github.com/gravitl/netmaker/models" | ||||||
|  | @ -25,7 +23,6 @@ func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.Object) (* | ||||||
| 	} | 	} | ||||||
| 	node, err := GetNode(macAndNetwork[0], macAndNetwork[1]) | 	node, err := GetNode(macAndNetwork[0], macAndNetwork[1]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println("could not get node "+macAndNetwork[0]+" "+macAndNetwork[1], err) |  | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	node.SetLastCheckIn() | 	node.SetLastCheckIn() | ||||||
|  | @ -71,7 +68,6 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object) | ||||||
| 
 | 
 | ||||||
| 	node, err = CreateNode(node, node.Network) | 	node, err = CreateNode(node, node.Network) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println("could not create node on network " + node.Network + " (gRPC controller)") |  | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	nodeData, err := json.Marshal(&node) | 	nodeData, err := json.Marshal(&node) | ||||||
|  | @ -121,7 +117,6 @@ func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object) | ||||||
| 
 | 
 | ||||||
| 	err := DeleteNode(nodeID, true) | 	err := DeleteNode(nodeID, true) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println("Error deleting node (gRPC controller).") |  | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -139,7 +134,7 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (* | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 		if node.Name == "netmaker" { | 		if node.IsServer == "yes" { | ||||||
| 			SetNetworkServerPeers(macAndNetwork[1]) | 			SetNetworkServerPeers(macAndNetwork[1]) | ||||||
| 		} | 		} | ||||||
| 		peers, err := GetPeersList(macAndNetwork[1]) | 		peers, err := GetPeersList(macAndNetwork[1]) | ||||||
|  |  | ||||||
|  | @ -3,11 +3,9 @@ package controller | ||||||
| import ( | import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"log" |  | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 |  | ||||||
| 	"github.com/gorilla/mux" | 	"github.com/gorilla/mux" | ||||||
| 	"github.com/gravitl/netmaker/database" | 	"github.com/gravitl/netmaker/database" | ||||||
| 	"github.com/gravitl/netmaker/functions" | 	"github.com/gravitl/netmaker/functions" | ||||||
|  | @ -648,7 +646,6 @@ func CreateIngressGateway(netid string, macaddress string) (models.Node, error) | ||||||
| 
 | 
 | ||||||
| 	network, err := functions.GetParentNetwork(netid) | 	network, err := functions.GetParentNetwork(netid) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println("Could not find network.") |  | ||||||
| 		return models.Node{}, err | 		return models.Node{}, err | ||||||
| 	} | 	} | ||||||
| 	node.IsIngressGateway = "yes" | 	node.IsIngressGateway = "yes" | ||||||
|  |  | ||||||
|  | @ -396,7 +396,7 @@ func UpdateUser(userchange models.User, user models.User) (models.User, error) { | ||||||
| 	if err = database.Insert(user.UserName, string(data), database.USERS_TABLE_NAME); err != nil { | 	if err = database.Insert(user.UserName, string(data), database.USERS_TABLE_NAME); err != nil { | ||||||
| 		return models.User{}, err | 		return models.User{}, err | ||||||
| 	} | 	} | ||||||
| 	functions.PrintUserLog("netmaker", "updated user "+queryUser, 1) | 	functions.PrintUserLog(models.NODE_SERVER_NAME, "updated user "+queryUser, 1) | ||||||
| 	return user, nil | 	return user, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ import ( | ||||||
| 	gconf.ServerGRPC = "localhost:8081" | 	gconf.ServerGRPC = "localhost:8081" | ||||||
| 	gconf.PortGRPC = "50051" | 	gconf.PortGRPC = "50051" | ||||||
| 	//err := SetGlobalConfig(gconf) | 	//err := SetGlobalConfig(gconf) | ||||||
| 	collection := REMOVE.Client.Database("netmaker").Collection("config") | 	collection := REMOVE.Client.Database(models.NODE_SERVER_NAME).Collection("config") | ||||||
| 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) | 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) | ||||||
| 	defer cancel() | 	defer cancel() | ||||||
| 	//create, _, err := functions.GetGlobalConfig() | 	//create, _, err := functions.GetGlobalConfig() | ||||||
|  | @ -24,7 +24,7 @@ import ( | ||||||
| 	//drop network, nodes, and user collections | 	//drop network, nodes, and user collections | ||||||
| 	var collections = []string{"networks", "nodes", "users", "dns"} | 	var collections = []string{"networks", "nodes", "users", "dns"} | ||||||
| 	for _, table := range collections { | 	for _, table := range collections { | ||||||
| 		collection := REMOVE.Client.Database("netmaker").Collection(table) | 		collection := REMOVE.Client.Database(models.NODE_SERVER_NAME).Collection(table) | ||||||
| 		ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) | 		ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) | ||||||
| 		defer cancel() | 		defer cancel() | ||||||
| 		err := collection.Drop(ctx) | 		err := collection.Drop(ctx) | ||||||
|  |  | ||||||
|  | @ -131,6 +131,5 @@ func FetchRecords(tableName string) (map[string]string, error) { | ||||||
| 	if len(records) == 0 { | 	if len(records) == 0 { | ||||||
| 		return nil, errors.New(NO_RECORDS) | 		return nil, errors.New(NO_RECORDS) | ||||||
| 	} | 	} | ||||||
| 	// log.Println(records) |  | ||||||
| 	return records, nil | 	return records, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -252,6 +252,9 @@ func NetworkNodesUpdateAction(networkName string, action string) error { | ||||||
| 			fmt.Println("error in node address assignment!") | 			fmt.Println("error in node address assignment!") | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|  | 		if action == models.NODE_UPDATE_KEY && node.StaticPubKey == "yes" { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
| 		if node.Network == networkName { | 		if node.Network == networkName { | ||||||
| 			node.Action = action | 			node.Action = action | ||||||
| 			data, err := json.Marshal(&node) | 			data, err := json.Marshal(&node) | ||||||
|  | @ -261,8 +264,7 @@ func NetworkNodesUpdateAction(networkName string, action string) error { | ||||||
| 			node.SetID() | 			node.SetID() | ||||||
| 			database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) | 			database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) | ||||||
| 		} | 		} | ||||||
| 	} |  	} | ||||||
| 
 |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -763,7 +765,7 @@ func DecrimentKey(networkName string, keyvalue string) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if newNetworkData, err := json.Marshal(&network); err != nil { | 	if newNetworkData, err := json.Marshal(&network); err != nil { | ||||||
| 		PrintUserLog("netmaker", "failed to decrement key", 2) | 		PrintUserLog(models.NODE_SERVER_NAME, "failed to decrement key", 2) | ||||||
| 		return | 		return | ||||||
| 	} else { | 	} else { | ||||||
| 		database.Insert(network.NetID, string(newNetworkData), database.NETWORKS_TABLE_NAME) | 		database.Insert(network.NetID, string(newNetworkData), database.NETWORKS_TABLE_NAME) | ||||||
|  |  | ||||||
|  | @ -2,7 +2,6 @@ package functions | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"log" |  | ||||||
| 	"os" | 	"os" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -23,7 +22,7 @@ func SetDNSDir() error { | ||||||
|         if os.IsNotExist(err) { |         if os.IsNotExist(err) { | ||||||
|                 os.Mkdir(dir+"/config/dnsconfig", 744) |                 os.Mkdir(dir+"/config/dnsconfig", 744) | ||||||
|         } else if err != nil { |         } else if err != nil { | ||||||
|                 log.Println("couldnt find or create /config/dnsconfig") |                 PrintUserLog("","couldnt find or create /config/dnsconfig",0) | ||||||
|                 return err |                 return err | ||||||
|         } |         } | ||||||
| 	return nil | 	return nil | ||||||
|  | @ -38,7 +37,7 @@ func SetCorefile(domains string) error { | ||||||
| 	if os.IsNotExist(err) { | 	if os.IsNotExist(err) { | ||||||
| 		os.Mkdir(dir+"/config/dnsconfig", 744) | 		os.Mkdir(dir+"/config/dnsconfig", 744) | ||||||
| 	} else if err != nil { | 	} else if err != nil { | ||||||
| 		log.Println("couldnt find or create /config/dnsconfig") | 		PrintUserLog("","couldnt find or create /config/dnsconfig",0) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -55,8 +54,6 @@ func SetCorefile(domains string) error { | ||||||
| 
 | 
 | ||||||
| 	err = ioutil.WriteFile(dir+"/config/dnsconfig/Corefile", corebytes, 0644) | 	err = ioutil.WriteFile(dir+"/config/dnsconfig/Corefile", corebytes, 0644) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println(err) |  | ||||||
| 		log.Println("") |  | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	return err | 	return err | ||||||
|  |  | ||||||
|  | @ -18,6 +18,7 @@ const TEN_YEARS_IN_SECONDS = 300000000 | ||||||
| 
 | 
 | ||||||
| // == ACTIONS == (can only be set by GRPC) | // == ACTIONS == (can only be set by GRPC) | ||||||
| const NODE_UPDATE_KEY = "updatekey" | const NODE_UPDATE_KEY = "updatekey" | ||||||
|  | const NODE_SERVER_NAME = "netmaker" | ||||||
| const NODE_DELETE = "delete" | const NODE_DELETE = "delete" | ||||||
| const NODE_IS_PENDING = "pending" | const NODE_IS_PENDING = "pending" | ||||||
| const NODE_NOOP = "noop" | const NODE_NOOP = "noop" | ||||||
|  | @ -56,12 +57,13 @@ type Node struct { | ||||||
| 	IsIngressGateway    string   `json:"isingressgateway" bson:"isingressgateway" yaml:"isingressgateway"` | 	IsIngressGateway    string   `json:"isingressgateway" bson:"isingressgateway" yaml:"isingressgateway"` | ||||||
| 	EgressGatewayRanges []string `json:"egressgatewayranges" bson:"egressgatewayranges" yaml:"egressgatewayranges"` | 	EgressGatewayRanges []string `json:"egressgatewayranges" bson:"egressgatewayranges" yaml:"egressgatewayranges"` | ||||||
| 	IngressGatewayRange string   `json:"ingressgatewayrange" bson:"ingressgatewayrange" yaml:"ingressgatewayrange"` | 	IngressGatewayRange string   `json:"ingressgatewayrange" bson:"ingressgatewayrange" yaml:"ingressgatewayrange"` | ||||||
| 	StaticIP            string   `json:"staticip" bson:"staticip" yaml:"staticip"` | 	StaticPubKey        string   `json:"staticpubkey" bson:"staticpubkey" yaml:"staticpubkey" validate:"checkyesorno"` | ||||||
| 	StaticPubKey        string   `json:"staticpubkey" bson:"staticpubkey" yaml:"staticpubkey"` | 	StaticIP            string   `json:"staticip" bson:"staticip" yaml:"staticip" validate:"checkyesorno"` | ||||||
| 	UDPHolePunch        string   `json:"udpholepunch" bson:"udpholepunch" yaml:"udpholepunch" validate:"checkyesorno"` | 	UDPHolePunch        string   `json:"udpholepunch" bson:"udpholepunch" yaml:"udpholepunch" validate:"checkyesorno"` | ||||||
| 	PullChanges         string   `json:"pullchanges" bson:"pullchanges" yaml:"pullchanges" validate:"checkyesorno"` | 	PullChanges         string   `json:"pullchanges" bson:"pullchanges" yaml:"pullchanges" validate:"checkyesorno"` | ||||||
| 	DNSOn               string   `json:"dnson" bson:"dnson" yaml:"dnson" validate:"checkyesorno"` | 	DNSOn               string   `json:"dnson" bson:"dnson" yaml:"dnson" validate:"checkyesorno"` | ||||||
| 	IsDualStack         string   `json:"isdualstack" bson:"isdualstack" yaml:"isdualstack" validate:"checkyesorno"` | 	IsDualStack         string   `json:"isdualstack" bson:"isdualstack" yaml:"isdualstack" validate:"checkyesorno"` | ||||||
|  | 	IsServer            string   `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"` | ||||||
| 	Action              string   `json:"action" bson:"action" yaml:"action"` | 	Action              string   `json:"action" bson:"action" yaml:"action"` | ||||||
| 	IsLocal             string   `json:"islocal" bson:"islocal" yaml:"islocal" validate:"checkyesorno"` | 	IsLocal             string   `json:"islocal" bson:"islocal" yaml:"islocal" validate:"checkyesorno"` | ||||||
| 	LocalRange          string   `json:"localrange" bson:"localrange" yaml:"localrange"` | 	LocalRange          string   `json:"localrange" bson:"localrange" yaml:"localrange"` | ||||||
|  | @ -111,6 +113,12 @@ func (node *Node) SetIsDualStackDefault() { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (node *Node) SetIsServerDefault() { | ||||||
|  | 	if node.IsServer != "yes" { | ||||||
|  | 		node.IsServer = "no" | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (node *Node) SetLastModified() { | func (node *Node) SetLastModified() { | ||||||
| 	node.LastModified = time.Now().Unix() | 	node.LastModified = time.Now().Unix() | ||||||
| } | } | ||||||
|  | @ -137,6 +145,23 @@ func (node *Node) SetDefaultName() { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (node *Node) CheckIsServer() bool { | ||||||
|  | 	nodeData, err := database.FetchRecords(database.NODES_TABLE_NAME) | ||||||
|  | 	if err != nil && !database.IsEmptyRecord(err) { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	for _, value := range nodeData { | ||||||
|  | 		var tmpNode Node | ||||||
|  | 		if err := json.Unmarshal([]byte(value), &tmpNode); err != nil { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if tmpNode.Network == node.Network && tmpNode.MacAddress != node.MacAddress { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (node *Node) GetNetwork() (Network, error) { | func (node *Node) GetNetwork() (Network, error) { | ||||||
| 
 | 
 | ||||||
| 	var network Network | 	var network Network | ||||||
|  | @ -204,6 +229,7 @@ func (node *Node) SetDefaults() { | ||||||
| 	node.SetPullChangesDefault() | 	node.SetPullChangesDefault() | ||||||
| 	node.SetDefaultAction() | 	node.SetDefaultAction() | ||||||
| 	node.SetID() | 	node.SetID() | ||||||
|  | 	node.SetIsServerDefault() | ||||||
| 	node.KeyUpdateTimeStamp = time.Now().Unix() | 	node.KeyUpdateTimeStamp = time.Now().Unix() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -232,7 +232,7 @@ func GetPeers(macaddress string, network string, server string, dualstack bool, | ||||||
| 			} | 			} | ||||||
| 			allowedips = append(allowedips, addr6) | 			allowedips = append(allowedips, addr6) | ||||||
| 		} | 		} | ||||||
| 		if nodecfg.Name == "netmaker" { | 		if nodecfg.IsServer == "yes" { | ||||||
| 			peer = wgtypes.PeerConfig{ | 			peer = wgtypes.PeerConfig{ | ||||||
| 				PublicKey:                   pubkey, | 				PublicKey:                   pubkey, | ||||||
| 				PersistentKeepaliveInterval: &keepaliveserver, | 				PersistentKeepaliveInterval: &keepaliveserver, | ||||||
|  |  | ||||||
|  | @ -80,7 +80,9 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig | ||||||
| 	nodeport = int(node.ListenPort) | 	nodeport = int(node.ListenPort) | ||||||
| 
 | 
 | ||||||
| 	conf := wgtypes.Config{} | 	conf := wgtypes.Config{} | ||||||
| 	if nodecfg.UDPHolePunch == "yes" && nodecfg.Name != "netmaker" { | 	if nodecfg.UDPHolePunch == "yes" &&   | ||||||
|  | 	nodecfg.IsServer == "no"  &&     | ||||||
|  | 	nodecfg.IsIngressGateway == "no" { | ||||||
| 		conf = wgtypes.Config{ | 		conf = wgtypes.Config{ | ||||||
| 			PrivateKey:   &key, | 			PrivateKey:   &key, | ||||||
| 			ReplacePeers: true, | 			ReplacePeers: true, | ||||||
|  |  | ||||||
|  | @ -163,10 +163,12 @@ func AddNetwork(network string) (bool, error) { | ||||||
| 		log.Println("could not change netclient directory permissions") | 		log.Println("could not change netclient directory permissions") | ||||||
| 		return false, err | 		return false, err | ||||||
| 	} | 	} | ||||||
| 	log.Println("executing network join: " + "/etc/netclient/netclient " + "join " + "-t " + token + " -name " + "netmaker" + " -endpoint " + pubip) | 	functions.PrintUserLog(models.NODE_SERVER_NAME,"executing network join: " + "/etc/netclient/netclient " + "join " + "-t " + token + " -name " + models.NODE_SERVER_NAME + " -endpoint " + pubip,0) | ||||||
| 
 | 
 | ||||||
| 	joinCMD := exec.Command("/etc/netclient/netclient", "join", "-t", token, "-name", "netmaker", "-endpoint", pubip) | 	joinCMD := exec.Command("/etc/netclient/netclient", "join", "-t", token, "-name", models.NODE_SERVER_NAME, "-endpoint", pubip) | ||||||
| 	err = joinCMD.Start() | 	err = joinCMD.Start() | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println(err) | 		log.Println(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue