From 482246477cba49c3ea49e88d42a2431885f7b5ae Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Wed, 2 Nov 2022 10:59:31 -0400 Subject: [PATCH 01/48] fix error from branch create --- logic/peers.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/logic/peers.go b/logic/peers.go index 552fd3bc..61eeb38b 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -111,6 +111,9 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) { if peer.LocalListenPort != 0 { peer.ListenPort = peer.LocalListenPort } + } else { + continue + } } // set address if setEndpoint is true From b3f90f29291d98ae01d3cb6aae7da66ec10286c9 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Wed, 2 Nov 2022 11:22:40 -0400 Subject: [PATCH 02/48] add hostid and separate server name/broker name --- compose/docker-compose.yml | 3 +- config/config.go | 9 +-- controllers/node.go | 139 +++++++++++++++++++------------------ models/node.go | 1 + models/structs.go | 1 + servercfg/serverconf.go | 11 +++ 6 files changed, 91 insertions(+), 73 deletions(-) diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index 04c14749..d85dfa70 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -19,7 +19,8 @@ services: - sqldata:/root/data - mosquitto_data:/etc/netmaker environment: - SERVER_NAME: "broker.NETMAKER_BASE_DOMAIN" + BROKER_NAME: "broker.NETMAKER_BASE_DOMAIN" + SERVER_NAME: "NETMAKER_BASE_DOMAIN" SERVER_HOST: "SERVER_PUBLIC_IP" SERVER_API_CONN_STRING: "api.NETMAKER_BASE_DOMAIN:443" COREDNS_ADDR: "SERVER_PUBLIC_IP" diff --git a/config/config.go b/config/config.go index 96ef050b..8ce069d5 100644 --- a/config/config.go +++ b/config/config.go @@ -1,7 +1,7 @@ -//Environment file for getting variables -//Currently the only thing it does is set the master password -//Should probably have it take over functions from OS such as port and mongodb connection details -//Reads from the config/environments/dev.yaml file by default +// Environment file for getting variables +// Currently the only thing it does is set the master password +// Should probably have it take over functions from OS such as port and mongodb connection details +// Reads from the config/environments/dev.yaml file by default package config import ( @@ -69,6 +69,7 @@ type ServerConfig struct { MQPort string `yaml:"mqport"` MQServerPort string `yaml:"mqserverport"` Server string `yaml:"server"` + Broker string `yam:"broker"` PublicIPService string `yaml:"publicipservice"` MQAdminPassword string `yaml:"mqadminpassword"` MetricsExporter string `yaml:"metrics_exporter"` diff --git a/controllers/node.go b/controllers/node.go index 95245f93..51a89bac 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -41,13 +41,13 @@ func nodeHandlers(r *mux.Router) { // // Authenticate to make further API calls related to a network. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: successResponse +// Responses: +// 200: successResponse func authenticate(response http.ResponseWriter, request *http.Request) { var authRequest models.AuthParams @@ -344,13 +344,13 @@ func authorize(nodesAllowed, networkCheck bool, authNetwork string, next http.Ha // // Gets all nodes associated with network including pending nodes. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeSliceResponse +// Responses: +// 200: nodeSliceResponse func getNetworkNodes(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") @@ -383,13 +383,14 @@ func getNetworkNodes(w http.ResponseWriter, r *http.Request) { // // Get all nodes across all networks. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth +// +// Responses: +// 200: nodeSliceResponse // -// Responses: -// 200: nodeSliceResponse // Not quite sure if this is necessary. Probably necessary based on front end but may want to review after iteration 1 if it's being used or not func getAllNodes(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") @@ -440,13 +441,13 @@ func getUsersNodes(user models.User) ([]models.Node, error) { // // Get an individual node. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeResponse +// Responses: +// 200: nodeResponse func getNode(w http.ResponseWriter, r *http.Request) { // set header. w.Header().Set("Content-Type", "application/json") @@ -497,13 +498,14 @@ func getNode(w http.ResponseWriter, r *http.Request) { // // Get the time that a network of nodes was last modified. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth +// +// Responses: +// 200: nodeLastModifiedResponse // -// Responses: -// 200: nodeLastModifiedResponse // TODO: This needs to be refactored // Potential way to do this: On UpdateNode, set a new field for "LastModified" // If we go with the existing way, we need to at least set network.NodesLastModified on UpdateNode @@ -529,13 +531,13 @@ func getLastModified(w http.ResponseWriter, r *http.Request) { // // Create a node on a network. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeGetResponse +// Responses: +// 200: nodeGetResponse func createNode(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") @@ -670,12 +672,12 @@ func createNode(w http.ResponseWriter, r *http.Request) { return } - // Create client for this node in Mq + // Create client for this host in Mq event := mq.MqDynsecPayload{ Commands: []mq.MqDynSecCmd{ { // delete if any client exists already Command: mq.DeleteClientCmd, - Username: node.ID, + Username: node.HostID, }, { Command: mq.CreateRoleCmd, @@ -685,7 +687,7 @@ func createNode(w http.ResponseWriter, r *http.Request) { }, { Command: mq.CreateClientCmd, - Username: node.ID, + Username: node.HostID, Password: nodePassword, Textname: node.Name, Roles: []mq.MqDynSecRole{ @@ -725,13 +727,14 @@ func createNode(w http.ResponseWriter, r *http.Request) { // // Takes a node out of pending state. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth +// +// Responses: +// 200: nodeResponse // -// Responses: -// 200: nodeResponse // Takes node out of pending state // TODO: May want to use cordon/uncordon terminology instead of "ispending". func uncordonNode(w http.ResponseWriter, r *http.Request) { @@ -758,13 +761,13 @@ func uncordonNode(w http.ResponseWriter, r *http.Request) { // // Create an egress gateway. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeResponse +// Responses: +// 200: nodeResponse func createEgressGateway(w http.ResponseWriter, r *http.Request) { var gateway models.EgressGatewayRequest var params = mux.Vars(r) @@ -797,13 +800,13 @@ func createEgressGateway(w http.ResponseWriter, r *http.Request) { // // Delete an egress gateway. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeResponse +// Responses: +// 200: nodeResponse func deleteEgressGateway(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var params = mux.Vars(r) @@ -831,13 +834,13 @@ func deleteEgressGateway(w http.ResponseWriter, r *http.Request) { // // Create an ingress gateway. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeResponse +// Responses: +// 200: nodeResponse func createIngressGateway(w http.ResponseWriter, r *http.Request) { var params = mux.Vars(r) w.Header().Set("Content-Type", "application/json") @@ -875,13 +878,13 @@ func createIngressGateway(w http.ResponseWriter, r *http.Request) { // // Delete an ingress gateway. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeResponse +// Responses: +// 200: nodeResponse func deleteIngressGateway(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var params = mux.Vars(r) @@ -913,13 +916,13 @@ func deleteIngressGateway(w http.ResponseWriter, r *http.Request) { // // Update an individual node. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeResponse +// Responses: +// 200: nodeResponse func updateNode(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") @@ -1024,13 +1027,13 @@ func updateNode(w http.ResponseWriter, r *http.Request) { // // Delete an individual node. // -// Schemes: https +// Schemes: https // -// Security: -// oauth +// Security: +// oauth // -// Responses: -// 200: nodeResponse +// Responses: +// 200: nodeResponse func deleteNode(w http.ResponseWriter, r *http.Request) { // Set header w.Header().Set("Content-Type", "application/json") diff --git a/models/node.go b/models/node.go index c4641d35..895b2e47 100644 --- a/models/node.go +++ b/models/node.go @@ -48,6 +48,7 @@ type NodeCheckin struct { // Node - struct for node model type Node struct { ID string `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" validate:"required,min=5,id_unique"` + HostID string `json:"hostid,omitempty" bson:"id,omitempty" yaml:"id,omitempty" validate:"required,min=5,id_unique"` Address string `json:"address" bson:"address" yaml:"address" validate:"omitempty,ipv4"` Address6 string `json:"address6" bson:"address6" yaml:"address6" validate:"omitempty,ipv6"` LocalAddress string `json:"localaddress" bson:"localaddress" yaml:"localaddress" validate:"omitempty"` diff --git a/models/structs.go b/models/structs.go index a082d231..13e3efab 100644 --- a/models/structs.go +++ b/models/structs.go @@ -218,6 +218,7 @@ type ServerConfig struct { Version string `yaml:"version"` MQPort string `yaml:"mqport"` Server string `yaml:"server"` + Broker string `yaml:"broker"` Is_EE bool `yaml:"isee"` } diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index 0006ce3c..15fcb3af 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -379,6 +379,17 @@ func GetServer() string { return server } +// GetBroker - gets the broker name +func GetBroker() string { + server := "" + if os.Getenv("BROKER_NAME") != "" { + server = os.Getenv("BROKER_NAME") + } else if config.Config.Server.Broker != "" { + server = config.Config.Server.Broker + } + return server +} + func GetVerbosity() int32 { var verbosity = 0 var err error From 3d80c6ea627914b4c19829ecf672723c97f376e9 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Wed, 2 Nov 2022 13:51:06 -0400 Subject: [PATCH 03/48] set node.HostID on server node creation --- logic/nodes.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/logic/nodes.go b/logic/nodes.go index 6bd46fe8..722d303b 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -324,6 +324,9 @@ func CreateNode(node *models.Node) error { } node.ID = uuid.NewString() + if node.IsServer == "yes" { + node.HostID = uuid.NewString() + } //Create a JWT for the node tokenString, _ := CreateJWT(node.ID, node.MacAddress, node.Network) From 07eb6e3e6c2d2904e4ab3145b4b7c7a0ba9d6a39 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Wed, 2 Nov 2022 18:04:40 -0400 Subject: [PATCH 04/48] send broker with server cfg --- servercfg/serverconf.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index 15fcb3af..39582592 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -96,6 +96,8 @@ func GetServerConfig() config.ServerConfig { // GetServerConfig - gets the server config into memory from file or env func GetServerInfo() models.ServerConfig { var cfg models.ServerConfig + cfg.Server = GetServer() + cfg.Broker = GetBroker() cfg.API = GetAPIConnString() cfg.CoreDNSAddr = GetCoreDNSAddr() cfg.APIPort = GetAPIPort() @@ -105,7 +107,6 @@ func GetServerInfo() models.ServerConfig { cfg.DNSMode = "on" } cfg.Version = GetVersion() - cfg.Server = GetServer() cfg.Is_EE = Is_EE return cfg From b453897e654a07a2a2fd5821c527aa0fc63f8cb5 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Mon, 14 Nov 2022 14:41:34 -0500 Subject: [PATCH 05/48] ensure netclient version is compatible --- controllers/node.go | 7 +++++++ go.mod | 3 +++ go.sum | 4 ++++ logic/version.go | 31 +++++++++++++++++++++++++++++++ logic/version_test.go | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+) create mode 100644 logic/version.go create mode 100644 logic/version_test.go diff --git a/controllers/node.go b/controllers/node.go index 51a89bac..f67dd3fe 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -2,6 +2,7 @@ package controller import ( "encoding/json" + "errors" "fmt" "net/http" "strings" @@ -574,6 +575,12 @@ func createNode(w http.ResponseWriter, r *http.Request) { return } + if !logic.IsVersionComptatible(node.Version) { + err := errors.New("incomatible netclient version") + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) + return + } + node.Network = networkName network, err := logic.GetNetworkByNode(&node) diff --git a/go.mod b/go.mod index 85e07b86..6e370546 100644 --- a/go.mod +++ b/go.mod @@ -46,6 +46,8 @@ require ( golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 ) +require github.com/matryer/is v1.4.0 // indirect + require ( cloud.google.com/go/compute v1.7.0 // indirect fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93 // indirect @@ -73,6 +75,7 @@ require ( github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-cmp v0.5.8 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect + github.com/hashicorp/go-version v1.6.0 github.com/josharian/native v1.0.0 // indirect github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e // indirect github.com/kr/text v0.2.0 // indirect diff --git a/go.sum b/go.sum index b673cacb..58660545 100644 --- a/go.sum +++ b/go.sum @@ -295,6 +295,8 @@ github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerX github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -335,6 +337,8 @@ github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lucor/goinfo v0.0.0-20210802170112-c078a2b0f08b/go.mod h1:PRq09yoB+Q2OJReAmwzKivcYyremnibWGbK7WfftHzc= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= diff --git a/logic/version.go b/logic/version.go new file mode 100644 index 00000000..24576a93 --- /dev/null +++ b/logic/version.go @@ -0,0 +1,31 @@ +package logic + +import ( + "strings" + "unicode" + + "github.com/hashicorp/go-version" +) + +const MinVersion = "v0.17.0" + +// IsVersionCompatible checks that the version passed is compabtible (>=) with MinVersion +func IsVersionComptatible(ver string) bool { + // during dev, assume developers know what they are doing + if ver == "dev" { + return true + } + trimmed := strings.TrimFunc(ver, func(r rune) bool { + return !unicode.IsNumber(r) + }) + v, err := version.NewVersion(trimmed) + if err != nil { + return false + } + constraint, err := version.NewConstraint(">= " + MinVersion) + if err != nil { + return false + } + return constraint.Check(v) + +} diff --git a/logic/version_test.go b/logic/version_test.go new file mode 100644 index 00000000..c94af967 --- /dev/null +++ b/logic/version_test.go @@ -0,0 +1,35 @@ +package logic + +import ( + "testing" + + "github.com/matryer/is" +) + +func TestVersion(t *testing.T) { + t.Run("valid version", func(t *testing.T) { + is := is.New(t) + valid := IsVersionComptatible("v0.17.1-testing") + is.Equal(valid, true) + }) + t.Run("dev version", func(t *testing.T) { + is := is.New(t) + valid := IsVersionComptatible("dev") + is.Equal(valid, true) + }) + t.Run("invalid version", func(t *testing.T) { + is := is.New(t) + valid := IsVersionComptatible("v0.14.2-refactor") + is.Equal(valid, false) + }) + t.Run("no version", func(t *testing.T) { + is := is.New(t) + valid := IsVersionComptatible("testing") + is.Equal(valid, false) + }) + t.Run("incomplete version", func(t *testing.T) { + is := is.New(t) + valid := IsVersionComptatible("0.18") + is.Equal(valid, true) + }) +} From 4df672de6830d4504d8a8aa15fc81ec376814876 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Tue, 15 Nov 2022 09:52:17 -0500 Subject: [PATCH 06/48] refactor node deletion --- controllers/node.go | 70 ++++++++++++++++-------------------- logic/networks.go | 2 +- logic/nodes.go | 87 +++++++++++++++++++++++++++++++++------------ logic/server.go | 4 +-- logic/zombie.go | 2 +- main.go | 1 + models/node.go | 1 + 7 files changed, 100 insertions(+), 67 deletions(-) diff --git a/controllers/node.go b/controllers/node.go index f67dd3fe..56ef7b04 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -665,7 +665,7 @@ func createNode(w http.ResponseWriter, r *http.Request) { } if !updatedUserNode { // user was found but not updated, so delete node logger.Log(0, "failed to add node to user", keyName) - logic.DeleteNodeByID(&node, true) + logic.DeleteNode(&node, true) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return } @@ -1049,22 +1049,11 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { var params = mux.Vars(r) var nodeid = params["nodeid"] fromNode := r.Header.Get("requestfrom") == "node" - var node, err = logic.GetNodeByID(nodeid) + node, err := logic.GetNodeByID(nodeid) if err != nil { - if fromNode { - node, err = logic.GetDeletedNodeByID(nodeid) - if err != nil { - logger.Log(0, r.Header.Get("user"), - fmt.Sprintf("error fetching node from deleted nodes [ %s ] info: %v", nodeid, err)) - logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) - return - } - } else { - logger.Log(0, r.Header.Get("user"), - fmt.Sprintf("error fetching node [ %s ] info: %v", nodeid, err)) - logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) - return - } + logger.Log(0, "error retrieving node to delete", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) + return } if isServer(&node) { err := fmt.Errorf("cannot delete server node") @@ -1080,34 +1069,35 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { return } } - //send update to node to be deleted before deleting on server otherwise message cannot be sent - node.Action = models.NODE_DELETE - - err = logic.DeleteNodeByID(&node, fromNode) - if err != nil { - logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + if err := logic.DeleteNode(&node, fromNode); err != nil { + logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("failed to delete node"), "internal")) return } if fromNode { - // deletes node related role and client - event := mq.MqDynsecPayload{ - Commands: []mq.MqDynSecCmd{ - { - Command: mq.DeleteClientCmd, - Username: nodeid, + //check if server should be removed from mq + found := false + // err is irrelevent + nodes, _ := logic.GetAllNodes() + for _, nodetocheck := range nodes { + if nodetocheck.HostID == node.HostID { + found = true + break + } + } + if !found { + // deletes node related role and client + event := mq.MqDynsecPayload{ + Commands: []mq.MqDynSecCmd{ + { + Command: mq.DeleteClientCmd, + Username: node.HostID, + }, }, - }, - } - - if err := mq.PublishEventToDynSecTopic(event); err != nil { - logger.Log(0, fmt.Sprintf("failed to send DynSec command [%v]: %v", - event.Commands, err.Error())) - } - } - - if servercfg.Is_EE { - if err = logic.EnterpriseResetAllPeersFailovers(node.ID, node.Network); err != nil { - logger.Log(0, "failed to reset failover lists during node delete for node", node.Name, node.Network) + } + if err := mq.PublishEventToDynSecTopic(event); err != nil { + logger.Log(0, fmt.Sprintf("failed to send DynSec command [%v]: %v", + event.Commands, err.Error())) + } } } diff --git a/logic/networks.go b/logic/networks.go index e55e1e49..35252d1d 100644 --- a/logic/networks.go +++ b/logic/networks.go @@ -54,7 +54,7 @@ func DeleteNetwork(network string) error { servers, err := GetSortedNetworkServerNodes(network) if err == nil { for _, s := range servers { - if err = DeleteNodeByID(&s, true); err != nil { + if err = DeleteNode(&s, true); err != nil { logger.Log(2, "could not removed server", s.Name, "before deleting network", network) } else { logger.Log(2, "removed server", s.Name, "before deleting network", network) diff --git a/logic/nodes.go b/logic/nodes.go index 722d303b..0f23adf7 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -1,6 +1,7 @@ package logic import ( + "context" "encoding/json" "errors" "fmt" @@ -22,8 +23,14 @@ import ( "golang.org/x/crypto/bcrypt" ) -// RELAY_NODE_ERR - error to return if relay node is unfound -const RELAY_NODE_ERR = "could not find relay for node" +const ( + // RELAY_NODE_ERR - error to return if relay node is unfound + RELAY_NODE_ERR = "could not find relay for node" + // NodePurgeTime time to wait for node to response to a NODE_DELETE actions + NodePurgeTime = time.Second * 10 + // NodePurgeCheckTime is how often to check nodes for Pending Delete + NodePurgeCheckTime = time.Second * 30 +) // GetNetworkNodes - gets the nodes of a network func GetNetworkNodes(network string) ([]models.Node, error) { @@ -160,8 +167,31 @@ func UpdateNode(currentNode *models.Node, newNode *models.Node) error { return fmt.Errorf("failed to update node " + currentNode.ID + ", cannot change ID.") } -// DeleteNodeByID - deletes a node from database or moves into delete nodes table -func DeleteNodeByID(node *models.Node, exterminate bool) error { +// DeleteNode - marks node for deletion if called by UI or deletes node if called by node +func DeleteNode(node *models.Node, purge bool) error { + if !purge { + newnode := node + newnode.PendingDelete = true + newnode.Action = models.NODE_DELETE + if err := UpdateNode(node, newnode); err != nil { + return err + } + return nil + } + if err := DeleteNodeByID(node); err != nil { + return err + } + if servercfg.Is_EE { + if err := EnterpriseResetAllPeersFailovers(node.ID, node.Network); err != nil { + logger.Log(0, "failed to reset failover lists during node delete for node", node.Name, node.Network) + } + } + + return nil +} + +// DeleteNodeByID - deletes a node from database +func DeleteNodeByID(node *models.Node) error { var err error var key = node.ID //delete any ext clients as required @@ -170,27 +200,11 @@ func DeleteNodeByID(node *models.Node, exterminate bool) error { logger.Log(0, "failed to deleted ext clients", err.Error()) } } - if !exterminate { - node.Action = models.NODE_DELETE - nodedata, err := json.Marshal(&node) - if err != nil { - return err - } - err = database.Insert(key, string(nodedata), database.DELETED_NODES_TABLE_NAME) - if err != nil { - return err - } - } else { - if err := database.DeleteRecord(database.DELETED_NODES_TABLE_NAME, key); err != nil { - logger.Log(2, err.Error()) - } - } if err = database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil { if !database.IsEmptyRecord(err) { return err } } - if servercfg.IsDNSMode() { SetDNS() } @@ -200,7 +214,6 @@ func DeleteNodeByID(node *models.Node, exterminate bool) error { logger.Log(0, "failed to dissasociate", node.OwnerID, "from node", node.ID, ":", err.Error()) } } - _, err = nodeacls.RemoveNodeACL(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID)) if err != nil { // ignoring for now, could hit a nil pointer if delete called twice @@ -210,11 +223,9 @@ func DeleteNodeByID(node *models.Node, exterminate bool) error { if err = DeleteMetrics(node.ID); err != nil { logger.Log(1, "unable to remove metrics from DB for node", node.ID, err.Error()) } - if node.IsServer == "yes" { return removeLocalServer(node) } - return nil } @@ -773,4 +784,34 @@ func updateProNodeACLS(node *models.Node) error { return nil } +func PurgePendingNodes(ctx context.Context) { + ticker := time.NewTicker(NodePurgeCheckTime) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + nodes, err := GetAllNodes() + if err != nil { + logger.Log(0, "PurgePendingNodes failed to retrieve nodes", err.Error()) + continue + } + for _, node := range nodes { + if node.PendingDelete { + modified := time.Unix(node.LastModified, 0) + if time.Since(modified) > NodePurgeTime { + if err := DeleteNode(&node, true); err != nil { + logger.Log(0, "failed to purge node", node.ID, err.Error()) + } else { + logger.Log(0, "purged node ", node.ID) + } + + } + } + } + } + } +} + // == END PRO == diff --git a/logic/server.go b/logic/server.go index 5ed2ddcd..4d5ccfa6 100644 --- a/logic/server.go +++ b/logic/server.go @@ -193,7 +193,7 @@ func ServerUpdate(serverNode *models.Node, ifaceDelta bool) error { var err = ServerPull(serverNode, ifaceDelta) if isDeleteError(err) { - return DeleteNodeByID(serverNode, true) + return DeleteNode(serverNode, true) } else if err != nil && !ifaceDelta { err = ServerPull(serverNode, true) if err != nil { @@ -224,7 +224,7 @@ func checkNodeActions(node *models.Node) string { } } if node.Action == models.NODE_DELETE { - err := DeleteNodeByID(node, true) + err := DeleteNode(node, true) if err != nil { logger.Log(1, "error deleting locally:", err.Error()) } diff --git a/logic/zombie.go b/logic/zombie.go index f5c0d31d..542448ce 100644 --- a/logic/zombie.go +++ b/logic/zombie.go @@ -74,7 +74,7 @@ func ManageZombies(ctx context.Context) { continue } if time.Since(time.Unix(node.LastCheckIn, 0)) > time.Minute*ZOMBIE_DELETE_TIME { - if err := DeleteNodeByID(&node, true); err != nil { + if err := DeleteNode(&node, true); err != nil { logger.Log(1, "error deleting zombie node", zombies[i], err.Error()) continue } diff --git a/main.go b/main.go index 3c15101a..878f4dda 100644 --- a/main.go +++ b/main.go @@ -184,6 +184,7 @@ func runMessageQueue(wg *sync.WaitGroup) { ctx, cancel := context.WithCancel(context.Background()) go mq.Keepalive(ctx) go logic.ManageZombies(ctx) + go logic.PurgePendingNodes(ctx) quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGTERM, os.Interrupt) <-quit diff --git a/models/node.go b/models/node.go index 895b2e47..1139d869 100644 --- a/models/node.go +++ b/models/node.go @@ -103,6 +103,7 @@ type Node struct { FirewallInUse string `json:"firewallinuse" bson:"firewallinuse" yaml:"firewallinuse"` InternetGateway string `json:"internetgateway" bson:"internetgateway" yaml:"internetgateway"` Connected string `json:"connected" bson:"connected" yaml:"connected" validate:"checkyesorno"` + PendingDelete bool `json:"pendingdelete" bson:"pendingdelete" yaml:"pendingdelete"` // == PRO == DefaultACL string `json:"defaultacl,omitempty" bson:"defaultacl,omitempty" yaml:"defaultacl,omitempty" validate:"checkyesornoorunset"` OwnerID string `json:"ownerid,omitempty" bson:"ownerid,omitempty" yaml:"ownerid,omitempty"` From c5919b347c204b36636aa7573996ed3e3aa2b9ea Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Mon, 28 Nov 2022 12:58:24 -0500 Subject: [PATCH 07/48] local interfaces --- go.mod | 2 +- models/node.go | 8 ++++++++ mq/handlers.go | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 6e370546..45766572 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 ) -require github.com/matryer/is v1.4.0 // indirect +require github.com/matryer/is v1.4.0 require ( cloud.google.com/go/compute v1.7.0 // indirect diff --git a/models/node.go b/models/node.go index 1139d869..ae786498 100644 --- a/models/node.go +++ b/models/node.go @@ -43,6 +43,13 @@ var seededRand *rand.Rand = rand.New( type NodeCheckin struct { Version string Connected string + Ifaces []Iface +} + +// Iface struct for local interfaces of a node +type Iface struct { + Name string + Address net.IPNet } // Node - struct for node model @@ -52,6 +59,7 @@ type Node struct { Address string `json:"address" bson:"address" yaml:"address" validate:"omitempty,ipv4"` Address6 string `json:"address6" bson:"address6" yaml:"address6" validate:"omitempty,ipv6"` LocalAddress string `json:"localaddress" bson:"localaddress" yaml:"localaddress" validate:"omitempty"` + Interfaces []Iface `json:"interfaces" yaml:"interfaces"` Name string `json:"name" bson:"name" yaml:"name" validate:"omitempty,max=62,in_charset"` NetworkSettings Network `json:"networksettings" bson:"networksettings" yaml:"networksettings" validate:"-"` ListenPort int32 `json:"listenport" bson:"listenport" yaml:"listenport" validate:"omitempty,numeric,min=1024,max=65535"` diff --git a/mq/handlers.go b/mq/handlers.go index a4b77bf4..ce36a49e 100644 --- a/mq/handlers.go +++ b/mq/handlers.go @@ -52,6 +52,7 @@ func Ping(client mqtt.Client, msg mqtt.Message) { node.SetLastCheckIn() node.Version = checkin.Version node.Connected = checkin.Connected + node.Interfaces = checkin.Ifaces if err := logic.UpdateNode(&node, &node); err != nil { logger.Log(0, "error updating node", node.Name, node.ID, " on checkin", err.Error()) return From 2c30133cf5a8a1081c1cab45e51e2f8639e14bf2 Mon Sep 17 00:00:00 2001 From: Yassine Messaoudi Date: Wed, 19 Oct 2022 14:44:40 +0100 Subject: [PATCH 08/48] fix #1603 [GUI] add search bar - Add search bar for networks view. - Used levenchtein distance to get search suggestions. --- netclient/gui/gui.go | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/netclient/gui/gui.go b/netclient/gui/gui.go index 43ebfd49..4db728bc 100644 --- a/netclient/gui/gui.go +++ b/netclient/gui/gui.go @@ -10,6 +10,8 @@ import ( "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" + "github.com/agnivade/levenshtein" + "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/netclient/functions" "github.com/gravitl/netmaker/netclient/gui/components" @@ -48,15 +50,48 @@ func Run(networks []string) error { views.SetView(views.NetDetails, netDetailsViews) window.SetFixedSize(false) + searchBar := widget.NewEntry() + searchBar.PlaceHolder = "Search a Network ..." + searchBar.TextStyle = fyne.TextStyle{ + Italic: true, + } + searchBar.OnChanged = func(text string) { + if text == "" { + networkView = container.NewVScroll(views.GetNetworksView(networks)) + networkView.SetMinSize(fyne.NewSize(400, 300)) + views.RefreshComponent(views.Networks, networkView) + views.ShowView(views.Networks) + return + } + + opts := []string{} + for _, n := range networks { + r := levenshtein.ComputeDistance(text, n) + if r <= 2 { + opts = append(opts, n) + } + } + + // fmt.Println(opts) + networkView = container.NewVScroll(views.GetNetworksView(opts)) + networkView.SetMinSize(fyne.NewSize(400, 300)) + views.RefreshComponent(views.Networks, networkView) + views.ShowView(views.Networks) + opts = nil + } + toolbar := container.NewCenter(widget.NewToolbar( components.NewToolbarLabelButton("Networks", theme.HomeIcon(), func() { + searchBar.Show() views.ShowView(views.Networks) views.ClearNotification() }, components.Blue_color), components.NewToolbarLabelButton("Join new", theme.ContentAddIcon(), func() { + searchBar.Hide() views.ShowView(views.Join) }, components.Gravitl_color), components.NewToolbarLabelButton("Uninstall", theme.ErrorIcon(), func() { + searchBar.Hide() confirmView := views.GetConfirmation("Confirm Netclient uninstall?", func() { views.ShowView(views.Networks) }, func() { @@ -96,8 +131,9 @@ func Run(networks []string) error { views.CurrentContent = container.NewVBox() views.CurrentContent.Add(container.NewGridWithRows( - 1, + 2, toolbar, + searchBar, )) views.CurrentContent.Add(views.GetView(views.Networks)) views.CurrentContent.Add(views.GetView(views.NetDetails)) From 6f5b88acd81278f1c7b935ce647e7c04d144d144 Mon Sep 17 00:00:00 2001 From: Yassine Messaoudi Date: Wed, 19 Oct 2022 14:45:38 +0100 Subject: [PATCH 09/48] update go.mod and go.sum --- go.mod | 1 + go.sum | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/go.mod b/go.mod index 45766572..5f38e391 100644 --- a/go.mod +++ b/go.mod @@ -40,6 +40,7 @@ require ( ) require ( + github.com/agnivade/levenshtein v1.1.1 github.com/coreos/go-oidc/v3 v3.4.0 github.com/gorilla/websocket v1.5.0 golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e diff --git a/go.sum b/go.sum index 58660545..955fa22a 100644 --- a/go.sum +++ b/go.sum @@ -73,8 +73,12 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= +github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= github.com/akavel/rsrc v0.10.2/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= +github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -118,6 +122,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= From 8ebaa4aea621be83160093b07a1a6df0f929e867 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 25 Oct 2022 19:24:40 +0000 Subject: [PATCH 10/48] only split postup/postdown on freebsd --- netclient/wireguard/common.go | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/netclient/wireguard/common.go b/netclient/wireguard/common.go index d952aed0..8992f121 100644 --- a/netclient/wireguard/common.go +++ b/netclient/wireguard/common.go @@ -462,21 +462,29 @@ func UpdateWgInterface(file, privateKey, nameserver string, node models.Node) er //} //need to split postup/postdown because ini lib adds a quotes which breaks freebsd if node.PostUp != "" { - parts := strings.Split(node.PostUp, " ; ") - for i, part := range parts { - if i == 0 { - wireguard.Section(section_interface).Key("PostUp").SetValue(part) + if node.OS == "freebsd" { + parts := strings.Split(node.PostUp, " ; ") + for i, part := range parts { + if i == 0 { + wireguard.Section(section_interface).Key("PostUp").SetValue(part) + } + wireguard.Section(section_interface).Key("PostUp").AddShadow(part) } - wireguard.Section(section_interface).Key("PostUp").AddShadow(part) + } else { + wireguard.Section(section_interface).Key("PostUp").SetValue(node.PostUp) } } if node.PostDown != "" { - parts := strings.Split(node.PostDown, " ; ") - for i, part := range parts { - if i == 0 { - wireguard.Section(section_interface).Key("PostDown").SetValue(part) + if node.OS == "freebsd" { + parts := strings.Split(node.PostDown, " ; ") + for i, part := range parts { + if i == 0 { + wireguard.Section(section_interface).Key("PostDown").SetValue(part) + } + wireguard.Section(section_interface).Key("PostDown").AddShadow(part) } - wireguard.Section(section_interface).Key("PostDown").AddShadow(part) + } else { + wireguard.Section(section_interface).Key("PostUp").SetValue(node.PostDown) } } if node.MTU != 0 { From 89d0b04732c5df0d7569b20fce3b7a51d4d496fd Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Fri, 28 Oct 2022 10:51:10 -0400 Subject: [PATCH 11/48] fix cp/paste error --- netclient/wireguard/common.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netclient/wireguard/common.go b/netclient/wireguard/common.go index 8992f121..be1ff16e 100644 --- a/netclient/wireguard/common.go +++ b/netclient/wireguard/common.go @@ -484,7 +484,7 @@ func UpdateWgInterface(file, privateKey, nameserver string, node models.Node) er wireguard.Section(section_interface).Key("PostDown").AddShadow(part) } } else { - wireguard.Section(section_interface).Key("PostUp").SetValue(node.PostDown) + wireguard.Section(section_interface).Key("PostDown").SetValue(node.PostDown) } } if node.MTU != 0 { From fbd905a91a2f98c338478178f44938032c5a7bac Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Wed, 26 Oct 2022 10:32:34 -0400 Subject: [PATCH 12/48] fix finger problem (missing } --- logic/peers.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/logic/peers.go b/logic/peers.go index 61eeb38b..ccc797e2 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -111,8 +111,6 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) { if peer.LocalListenPort != 0 { peer.ListenPort = peer.LocalListenPort } - } else { - continue } } From 7746fff80d74a04cfa6814f2171040c2afd8532d Mon Sep 17 00:00:00 2001 From: Petr Velan Date: Wed, 19 Oct 2022 17:09:32 +0200 Subject: [PATCH 13/48] Fixed default postgres user name to match docs Changed default SQL user from posgres to postgres --- servercfg/sqlconf.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servercfg/sqlconf.go b/servercfg/sqlconf.go index 91dc4736..e74a5a8c 100644 --- a/servercfg/sqlconf.go +++ b/servercfg/sqlconf.go @@ -36,7 +36,7 @@ func GetSQLPort() int32 { return port } func GetSQLUser() string { - user := "posgres" + user := "postgres" if os.Getenv("SQL_USER") != "" { user = os.Getenv("SQL_USER") } else if config.Config.SQL.Username != "" { From 573c831642f62df8f0799928f805934ef5bb801a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 23:23:43 +0000 Subject: [PATCH 14/48] Bump github.com/urfave/cli/v2 from 2.20.2 to 2.23.0 Bumps [github.com/urfave/cli/v2](https://github.com/urfave/cli) from 2.20.2 to 2.23.0. - [Release notes](https://github.com/urfave/cli/releases) - [Changelog](https://github.com/urfave/cli/blob/main/docs/CHANGELOG.md) - [Commits](https://github.com/urfave/cli/compare/v2.20.2...v2.23.0) --- updated-dependencies: - dependency-name: github.com/urfave/cli/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5f38e391..318239d2 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/stretchr/testify v1.8.0 github.com/txn2/txeh v1.3.0 - github.com/urfave/cli/v2 v2.20.2 + github.com/urfave/cli/v2 v2.23.0 golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b // indirect golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 diff --git a/go.sum b/go.sum index 955fa22a..09f5309f 100644 --- a/go.sum +++ b/go.sum @@ -463,8 +463,8 @@ github.com/txn2/txeh v1.3.0/go.mod h1:O7M6gUTPeMF+vsa4c4Ipx3JDkOYrruB1Wry8QRsMcw github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg= -github.com/urfave/cli/v2 v2.20.2 h1:dKA0LUjznZpwmmbrc0pOgcLTEilnHeM8Av9Yng77gHM= -github.com/urfave/cli/v2 v2.20.2/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI= +github.com/urfave/cli/v2 v2.23.0 h1:pkly7gKIeYv3olPAeNajNpLjeJrmTPYCoZWaV+2VfvE= +github.com/urfave/cli/v2 v2.23.0/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= From d4453ad1fe801fc02ab7a56329e117717a2f937d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 23:23:38 +0000 Subject: [PATCH 15/48] Bump github.com/eclipse/paho.mqtt.golang from 1.4.1 to 1.4.2 Bumps [github.com/eclipse/paho.mqtt.golang](https://github.com/eclipse/paho.mqtt.golang) from 1.4.1 to 1.4.2. - [Release notes](https://github.com/eclipse/paho.mqtt.golang/releases) - [Commits](https://github.com/eclipse/paho.mqtt.golang/compare/v1.4.1...v1.4.2) --- updated-dependencies: - dependency-name: github.com/eclipse/paho.mqtt.golang dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 318239d2..c07e5915 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/gravitl/netmaker go 1.18 require ( - github.com/eclipse/paho.mqtt.golang v1.4.1 + github.com/eclipse/paho.mqtt.golang v1.4.2 github.com/go-playground/validator/v10 v10.11.1 github.com/golang-jwt/jwt/v4 v4.4.2 github.com/google/uuid v1.3.0 diff --git a/go.sum b/go.sum index 09f5309f..e6f2e948 100644 --- a/go.sum +++ b/go.sum @@ -132,8 +132,8 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/eclipse/paho.mqtt.golang v1.4.1 h1:tUSpviiL5G3P9SZZJPC4ZULZJsxQKXxfENpMvdbAXAI= -github.com/eclipse/paho.mqtt.golang v1.4.1/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= From c536ff0c034b4670bb18fdf7fcb3fab7e9173993 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 23:23:34 +0000 Subject: [PATCH 16/48] Bump github.com/mattn/go-sqlite3 from 1.14.15 to 1.14.16 Bumps [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) from 1.14.15 to 1.14.16. - [Release notes](https://github.com/mattn/go-sqlite3/releases) - [Commits](https://github.com/mattn/go-sqlite3/compare/v1.14.15...v1.14.16) --- updated-dependencies: - dependency-name: github.com/mattn/go-sqlite3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c07e5915..07d93d34 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 github.com/lib/pq v1.10.7 - github.com/mattn/go-sqlite3 v1.14.15 + github.com/mattn/go-sqlite3 v1.14.16 github.com/rqlite/gorqlite v0.0.0-20210514125552-08ff1e76b22f github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/stretchr/testify v1.8.0 diff --git a/go.sum b/go.sum index e6f2e948..6c9eaefb 100644 --- a/go.sum +++ b/go.sum @@ -348,8 +348,8 @@ github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwM github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= -github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= -github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2/go.mod h1:76rfSfYPWj01Z85hUf/ituArm797mNKcvINh1OlsZKo= github.com/mdlayher/genetlink v1.2.0 h1:4yrIkRV5Wfk1WfpWTcoOlGmsWgQj3OtQN9ZsbrE+XtU= github.com/mdlayher/genetlink v1.2.0/go.mod h1:ra5LDov2KrUCZJiAtEvXXZBxGMInICMXIwshlJ+qRxQ= From ec31ccd2379020c5f02d5b521682453f5c90d7d1 Mon Sep 17 00:00:00 2001 From: Alex Feiszli <31018251+afeiszli@users.noreply.github.com> Date: Wed, 2 Nov 2022 09:10:50 -0400 Subject: [PATCH 17/48] Update SECURITY.md --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 0c58e047..2ff2e248 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -9,4 +9,4 @@ However, there is no official bug bounty program up yet for the Netmaker project ## Reporting a Vulnerability -Please report security issues to `info@gravitl.com` +Please report security issues to `info@netmaker.io` From fded9d502e52275609e962b25f3645e23b6f9604 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Nov 2022 14:26:25 +0000 Subject: [PATCH 18/48] Bump github.com/stretchr/testify from 1.8.0 to 1.8.1 Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.0 to 1.8.1. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.8.0...v1.8.1) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 07d93d34..40ef133a 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.16 github.com/rqlite/gorqlite v0.0.0-20210514125552-08ff1e76b22f github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 github.com/txn2/txeh v1.3.0 github.com/urfave/cli/v2 v2.23.0 golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd diff --git a/go.sum b/go.sum index 6c9eaefb..66d91754 100644 --- a/go.sum +++ b/go.sum @@ -445,6 +445,7 @@ github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 h1:m59mIOBO4kfcNCE github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -453,8 +454,9 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tevino/abool v1.2.0 h1:heAkClL8H6w+mK5md9dzsuohKeXHUpY7Vw0ZCKW+huA= github.com/tevino/abool v1.2.0/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg= From c9d5a44a0efe147f4b00da2c6e164b8dc3398cbb Mon Sep 17 00:00:00 2001 From: tt2468 Date: Tue, 18 Oct 2022 22:56:42 -0700 Subject: [PATCH 19/48] Add missing line ending in ingress postUp command Adds a missing line ending in the postUp masquerade command. This missing line is sneaky, and only seems to pose an issue when both ingress and egress modes are enabled. --- logic/gateway.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logic/gateway.go b/logic/gateway.go index a84d1867..e8427a3b 100644 --- a/logic/gateway.go +++ b/logic/gateway.go @@ -324,7 +324,7 @@ func firewallNFTCommandsCreateIngress(networkInterface string) (string, string) postUp += "nft add rule ip filter FORWARD oifname " + networkInterface + " counter accept ; " postUp += "nft add table nat ; " postUp += "nft add chain nat postrouting ; " - postUp += "nft add rule ip nat postrouting oifname " + networkInterface + " counter masquerade" + postUp += "nft add rule ip nat postrouting oifname " + networkInterface + " counter masquerade ; " // doesn't remove potentially empty tables or chains postDown := "nft flush table filter ; " From 007de062ba38f98837870e188960a41290b54d0b Mon Sep 17 00:00:00 2001 From: afeiszli Date: Fri, 4 Nov 2022 14:25:01 -0400 Subject: [PATCH 20/48] updated script --- scripts/nm-quick-interactive.sh | 406 +++++++++++++++++--------------- 1 file changed, 221 insertions(+), 185 deletions(-) diff --git a/scripts/nm-quick-interactive.sh b/scripts/nm-quick-interactive.sh index e1258462..f9a18ee2 100644 --- a/scripts/nm-quick-interactive.sh +++ b/scripts/nm-quick-interactive.sh @@ -1,7 +1,5 @@ #!/bin/bash -set -e - cat << "EOF" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -19,59 +17,209 @@ cat << "EOF" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EOF +wait_seconds() {( + for ((a=1; a <= $1; a++)) + do + echo ". . ." + sleep 1 + done +)} + +confirm() {( + while true; do + read -p 'Does everything look right? [y/n]: ' yn + case $yn in + [Yy]* ) override="true"; break;; + [Nn]* ) echo "exiting..."; exit;; + * ) echo "Please answer yes or no.";; + esac + done +)} + +if [ $(id -u) -ne 0 ]; then + echo "This script must be run as root" + exit 1 +fi + +echo "checking dependencies..." + +OS=$(uname) + +if [ -f /etc/debian_version ]; then + dependencies="wireguard wireguard-tools jq docker.io docker-compose" + update_cmd='apt update' + install_cmd='apt-get install -y' +elif [ -f /etc/alpine-release ]; then + dependencies="wireguard jq docker.io docker-compose" + update_cmd='apk update' + install_cmd='apk --update add' +elif [ -f /etc/centos-release ]; then + dependencies="wireguard jq docker.io docker-compose" + update_cmd='yum update' + install_cmd='yum install -y' +elif [ -f /etc/fedora-release ]; then + dependencies="wireguard jq docker.io docker-compose" + update_cmd='dnf update' + install_cmd='dnf install -y' +elif [ -f /etc/redhat-release ]; then + dependencies="wireguard jq docker.io docker-compose" + update_cmd='yum update' + install_cmd='yum install -y' +elif [ -f /etc/arch-release ]; then + dependecies="wireguard-tools jq docker.io docker-compose" + update_cmd='pacman -Sy' + install_cmd='pacman -S --noconfirm' +elif [ "${OS}" = "FreeBSD" ]; then + dependencies="wireguard wget jq docker.io docker-compose" + update_cmd='pkg update' + install_cmd='pkg install -y' +elif [ -f /etc/turris-version ]; then + dependencies="wireguard-tools bash jq docker.io docker-compose" + OS="TurrisOS" + update_cmd='opkg update' + install_cmd='opkg install' +elif [ -f /etc/openwrt_release ]; then + dependencies="wireguard-tools bash jq docker.io docker-compose" + OS="OpenWRT" + update_cmd='opkg update' + install_cmd='opkg install' +else + install_cmd='' +fi + +if [ -z "${install_cmd}" ]; then + echo "OS unsupported for automatic dependency install" + exit 1 +fi + +set -- $dependencies +while [ -n "$1" ]; do + if [ "${OS}" = "FreeBSD" ]; then + is_installed=$(pkg check -d $1 | grep "Checking" | grep "done") + if [ "$is_installed" != "" ]; then + echo " " $1 is installed + else + echo " " $1 is not installed. Attempting install. + ${install_cmd} $1 + sleep 5 + is_installed=$(pkg check -d $1 | grep "Checking" | grep "done") + if [ "$is_installed" != "" ]; then + echo " " $1 is installed + elif [ -x "$(command -v $1)" ]; then + echo " " $1 is installed + else + echo " " FAILED TO INSTALL $1 + echo " " This may break functionality. + fi + fi + else + if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; then + is_installed=$(opkg list-installed $1 | grep $1) + else + is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed") + fi + if [ "${is_installed}" != "" ]; then + echo " " $1 is installed + else + echo " " $1 is not installed. Attempting install. + ${install_cmd} $1 + sleep 5 + if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; then + is_installed=$(opkg list-installed $1 | grep $1) + else + is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed") + fi + if [ "${is_installed}" != "" ]; then + echo " " $1 is installed + elif [ -x "$(command -v $1)" ]; then + echo " " $1 is installed + else + echo " " FAILED TO INSTALL $1 + echo " " This may break functionality. + fi + fi + fi + shift +done + +echo "-----------------------------------------------------" +echo "dependency check complete" +echo "-----------------------------------------------------" + +wait_seconds 3 + +set -e + NETMAKER_BASE_DOMAIN=nm.$(curl -s ifconfig.me | tr . -).nip.io COREDNS_IP=$(ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p') SERVER_PUBLIC_IP=$(curl -s ifconfig.me) MASTER_KEY=$(tr -dc A-Za-z0-9 = 0 )) || continue - break -done +echo "-----------------------------------------------------" +echo "The following subdomains will be used:" +echo " dashboard.$NETMAKER_BASE_DOMAIN" +echo " api.$NETMAKER_BASE_DOMAIN" +echo " broker.$NETMAKER_BASE_DOMAIN" +echo " prometheus.$NETMAKER_BASE_DOMAIN" +echo " netmaker-exporter.$NETMAKER_BASE_DOMAIN" +echo " grafana.$NETMAKER_BASE_DOMAIN" +echo "-----------------------------------------------------" + +if [[ "$DOMAIN_TYPE" == "custom" ]]; then + echo "is DNS configured correctly with records pointing to $SERVER_PUBLIC_IP?" + confirm fi -if [ -n "$num_clients" ]; then - NUM_CLIENTS=$num_clients -fi +wait_seconds 1 + +echo "-----------------------------------------------------" +echo "Provide Details for EE installation:" +echo " 1. Log into https://dashboard.license.netmaker.io" +echo " 2. Copy License Key Value: https://dashboard.license.netmaker.io/license-keys" +echo " 3. Retrieve Account ID: https://dashboard.license.netmaker.io/user" +echo " 4. note email address" +echo "-----------------------------------------------------" +unset LICENSE_KEY +while [ -z "$LICENSE_KEY" ]; do + read -p "License Key: " LICENSE_KEY +done +unset ACCOUNT_ID +while [ -z ${ACCOUNT_ID} ]; do + read -p "Account ID: " ACCOUNT_ID +done +unset EMAIL +while [ -z ${EMAIL} ]; do + read -p "Email Address: " EMAIL +done + +wait_seconds 2 echo "-----------------------------------------------------------------" echo " SETUP ARGUMENTS" @@ -79,41 +227,24 @@ echo "-----------------------------------------------------------------" echo " domain: $NETMAKER_BASE_DOMAIN" echo " email: $EMAIL" echo " public ip: $SERVER_PUBLIC_IP" -echo " setup mesh?: $MESH_SETUP" -echo " setup vpn?: $VPN_SETUP" -if [ "${VPN_SETUP}" == "true" ]; then -echo " # clients: $NUM_CLIENTS" -fi +echo " license: $LICENSE_KEY" +echo " account id: $ACCOUNT_ID" -while true; do - read -p 'Does everything look right? [y/n]: ' yn - case $yn in - [Yy]* ) override="true"; break;; - [Nn]* ) echo "exiting..."; exit;; - * ) echo "Please answer yes or no.";; - esac -done +echo "-----------------------------------------------------------------" +echo "Confirm Settings for Installation" +echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" + +confirm -echo "Beginning installation in 5 seconds..." +echo "-----------------------------------------------------------------" +echo "Beginning installation..." +echo "-----------------------------------------------------------------" -sleep 5 - -if [ -f "/root/docker-compose.yml" ]; then - echo "Using existing docker compose" -else - echo "Pulling docker compose" - wget -q -O /root/docker-compose.yml https://raw.githubusercontent.com/gravitl/netmaker/master/compose/docker-compose.yml -fi - - -if [ -f "/root/mosquitto.conf" ]; then - echo "Using existing mosquitto config" -else - echo "Pulling mosquitto config" - wget -q -O /root/mosquitto.conf https://raw.githubusercontent.com/gravitl/netmaker/master/docker/mosquitto.conf -fi +wait_seconds 3 +echo "Pulling config files..." +wget -O docker-compose.yml https://raw.githubusercontent.com/gravitl/netmaker/master/compose/docker-compose.ee.yml && wget -O /root/mosquitto.conf https://raw.githubusercontent.com/gravitl/netmaker/master/docker/mosquitto.conf && wget -q -O /root/wait.sh https://raw.githubusercontent.com/gravitl/netmaker/develop/docker/wait.sh && chmod +x wait.sh mkdir -p /etc/netmaker @@ -123,6 +254,9 @@ sed -i "s/NETMAKER_BASE_DOMAIN/$NETMAKER_BASE_DOMAIN/g" /root/docker-compose.yml sed -i "s/SERVER_PUBLIC_IP/$SERVER_PUBLIC_IP/g" /root/docker-compose.yml sed -i "s/REPLACE_MASTER_KEY/$MASTER_KEY/g" /root/docker-compose.yml sed -i "s/YOUR_EMAIL/$EMAIL/g" /root/docker-compose.yml +sed -i "s/REPLACE_MQ_ADMIN_PASSWORD/$MQ_PASSWORD/g" /root/docker-compose.yml +sed -i "s~YOUR_LICENSE_KEY~$LICENSE_KEY~g" /root/docker-compose.yml +sed -i "s/YOUR_ACCOUNT_ID/$ACCOUNT_ID/g" /root/docker-compose.yml echo "Starting containers..." @@ -157,140 +291,42 @@ done setup_mesh() {( set -e -sleep 5 + +wait_seconds 5 + echo "Creating netmaker network (10.101.0.0/16)" curl -s -o /dev/null -d '{"addressrange":"10.101.0.0/16","netid":"netmaker"}' -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/networks -sleep 5 +wait_seconds 5 echo "Creating netmaker access key" curlresponse=$(curl -s -d '{"uses":99999,"name":"netmaker-key"}' -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/networks/netmaker/keys) ACCESS_TOKEN=$(jq -r '.accessstring' <<< ${curlresponse}) -sleep 5 +wait_seconds 3 echo "Configuring netmaker server as ingress gateway" -curlresponse=$(curl -s -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker) -SERVER_ID=$(jq -r '.[0].id' <<< ${curlresponse}) + +while [ -z "$SERVER_ID" ]; do + echo "waiting for server node to become available" + wait_seconds 2 + curlresponse=$(curl -s -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker) + SERVER_ID=$(jq -r '.[0].id' <<< ${curlresponse}) +done curl -o /dev/null -s -X POST -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker/$SERVER_ID/createingress -sleep 5 )} -mesh_connect_logs() { -sleep 5 -echo "-----------------------------------------------------------------" -echo "-----------------------------------------------------------------" -echo "DEFAULT NETWORK CLIENT INSTALL INSTRUCTIONS:" -echo "-----------------------------------------------------------------" -echo "-----------------------------------------------------------------" -sleep 5 -echo "For Linux and Mac clients, install with the following command:" -echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" -echo "curl -sfL https://raw.githubusercontent.com/gravitl/netmaker/develop/scripts/netclient-install.sh | sudo KEY=$VPN_ACCESS_TOKEN sh -" -sleep 5 -echo "-----------------------------------------------------------------" -echo "-----------------------------------------------------------------" -echo "For Windows clients, perform the following from powershell, as administrator:" -echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" -echo "1. Make sure WireGuardNT is installed - https://download.wireguard.com/windows-client/wireguard-installer.exe" -echo "2. Download netclient.exe - wget https://github.com/gravitl/netmaker/releases/download/latest/netclient.exe" -echo "3. Install Netclient - powershell.exe .\\netclient.exe join -t $VPN_ACCESS_TOKEN" -echo "4. Whitelist C:\ProgramData\Netclient in Windows Defender" -sleep 5 -echo "-----------------------------------------------------------------" -echo "-----------------------------------------------------------------" -echo "For Android and iOS clients, perform the following steps:" -echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" -echo "1. Log into UI at dashboard.$NETMAKER_BASE_DOMAIN" -echo "2. Navigate to \"EXTERNAL CLIENTS\" tab" -echo "3. Select the gateway and create clients" -echo "4. Scan the QR Code from WireGuard app in iOS or Android" -echo "-----------------------------------------------------------------" -echo "-----------------------------------------------------------------" -sleep 5 -} - -setup_vpn() {( set -e - -echo "Creating vpn network (10.201.0.0/16)" - -sleep 5 -curl -s -o /dev/null -d '{"addressrange":"10.201.0.0/16","netid":"vpn","defaultextclientdns":"8.8.8.8"}' -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/networks - -sleep 5 - -echo "Configuring netmaker server as vpn inlet..." - -curlresponse=$(curl -s -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/vpn) -SERVER_ID=$(jq -r '.[0].id' <<< ${curlresponse}) - -curl -s -o /dev/null -X POST -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/vpn/$SERVER_ID/createingress - -echo "Waiting 10 seconds for server to apply configuration..." - -sleep 10 - - -echo "Configuring netmaker server vpn gateway..." - -[ -z "$GATEWAY_IFACE" ] && GATEWAY_IFACE=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)') - -echo "Gateway iface: $GATEWAY_IFACE" - -curlresponse=$(curl -s -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/vpn) -SERVER_ID=$(jq -r '.[0].id' <<< ${curlresponse}) - -EGRESS_JSON=$( jq -n \ - --arg gw "$GATEWAY_IFACE" \ - '{ranges: ["0.0.0.0/0","::/0"], interface: $gw}' ) - -echo "Egress json: $EGRESS_JSON" -curl -s -o /dev/null -X POST -d "$EGRESS_JSON" -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/vpn/$SERVER_ID/creategateway - -echo "Creating client configs..." - -for ((a=1; a <= $NUM_CLIENTS; a++)) -do - CLIENT_JSON=$( jq -n \ - --arg clientid "vpnclient-$a" \ - '{clientid: $clientid}' ) - - curl -s -o /dev/null -d "$CLIENT_JSON" -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/extclients/vpn/$SERVER_ID -done -sleep 5 -)} - -vpn_connect_logs() { -sleep 5 -echo "-----------------------------------------------------------------" -echo "-----------------------------------------------------------------" -echo "VPN GATEWAY CLIENT INSTALL INSTRUCTIONS:" -echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" -echo "1. log into dashboard.$NETMAKER_BASE_DOMAIN" -echo "2. Navigate to \"EXTERNAL CLIENTS\" tab" -echo "3. Download or scan a client config (vpnclient-x) to the appropriate device" -echo "4. Follow the steps for your system to configure WireGuard on the appropriate device" -echo "5. Create and delete clients as necessary. Changes to netmaker server settings require regenerating ext clients." -echo "-----------------------------------------------------------------" -echo "-----------------------------------------------------------------" -sleep 5 -} - set +e test_connection -if [ "${MESH_SETUP}" != "false" ]; then - setup_mesh -fi +wait_seconds 3 -if [ "${VPN_SETUP}" == "true" ]; then - setup_vpn -fi +setup_mesh echo "-----------------------------------------------------------------" echo "-----------------------------------------------------------------" From 959105243f3cb498268259bda92f1010579ad46c Mon Sep 17 00:00:00 2001 From: afeiszli Date: Fri, 4 Nov 2022 17:10:00 -0400 Subject: [PATCH 21/48] interactive installer --- scripts/nm-quick-interactive.sh | 102 +++++++++++++++++++++++--------- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/scripts/nm-quick-interactive.sh b/scripts/nm-quick-interactive.sh index f9a18ee2..7842a3f3 100644 --- a/scripts/nm-quick-interactive.sh +++ b/scripts/nm-quick-interactive.sh @@ -17,6 +17,37 @@ cat << "EOF" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EOF +if [ -z "$1" ]; then + echo "-----------------------------------------------------" + echo "Would you like to install Netmaker Community Edition (CE), or Netmaker Enterprise Edition (EE)?" + echo "EE will require you to create an account at https://dashboard.license.netmaker.io" + echo "-----------------------------------------------------" + select install_option in "Community Edition" "Enterprise Edition"; do + case $REPLY in + 1) + echo "installing Netmaker CE" + INSTALL_TYPE="ce" + break + ;; + 2) + echo "installing Netmaker EE" + INSTALL_TYPE="ee" + break + ;; + *) echo "invalid option $REPLY";; + esac + done +elif [ "$1" = "ce" ]; then + echo "installing Netmaker CE" + INSTALL_TYPE="ce" +elif [ "$1" = "ee" ]; then + echo "installing Netmaker EE" + INSTALL_TYPE="ee" +else + echo "install type invalid (options: 'ce, ee')" + exit 1 +fi + wait_seconds() {( for ((a=1; a <= $1; a++)) do @@ -187,36 +218,45 @@ echo "The following subdomains will be used:" echo " dashboard.$NETMAKER_BASE_DOMAIN" echo " api.$NETMAKER_BASE_DOMAIN" echo " broker.$NETMAKER_BASE_DOMAIN" -echo " prometheus.$NETMAKER_BASE_DOMAIN" -echo " netmaker-exporter.$NETMAKER_BASE_DOMAIN" -echo " grafana.$NETMAKER_BASE_DOMAIN" + +if [ "$INSTALL_TYPE" = "ee" ]; then + echo " prometheus.$NETMAKER_BASE_DOMAIN" + echo " netmaker-exporter.$NETMAKER_BASE_DOMAIN" + echo " grafana.$NETMAKER_BASE_DOMAIN" +fi + echo "-----------------------------------------------------" if [[ "$DOMAIN_TYPE" == "custom" ]]; then - echo "is DNS configured correctly with records pointing to $SERVER_PUBLIC_IP?" + echo "before continuing, confirm DNS is configured correctly, with records pointing to $SERVER_PUBLIC_IP" confirm fi wait_seconds 1 -echo "-----------------------------------------------------" -echo "Provide Details for EE installation:" -echo " 1. Log into https://dashboard.license.netmaker.io" -echo " 2. Copy License Key Value: https://dashboard.license.netmaker.io/license-keys" -echo " 3. Retrieve Account ID: https://dashboard.license.netmaker.io/user" -echo " 4. note email address" -echo "-----------------------------------------------------" -unset LICENSE_KEY -while [ -z "$LICENSE_KEY" ]; do - read -p "License Key: " LICENSE_KEY -done -unset ACCOUNT_ID -while [ -z ${ACCOUNT_ID} ]; do - read -p "Account ID: " ACCOUNT_ID -done +if [ "$INSTALL_TYPE" = "ee" ]; then + + echo "-----------------------------------------------------" + echo "Provide Details for EE installation:" + echo " 1. Log into https://dashboard.license.netmaker.io" + echo " 2. Copy License Key Value: https://dashboard.license.netmaker.io/license-keys" + echo " 3. Retrieve Account ID: https://dashboard.license.netmaker.io/user" + echo " 4. note email address" + echo "-----------------------------------------------------" + unset LICENSE_KEY + while [ -z "$LICENSE_KEY" ]; do + read -p "License Key: " LICENSE_KEY + done + unset ACCOUNT_ID + while [ -z ${ACCOUNT_ID} ]; do + read -p "Account ID: " ACCOUNT_ID + done + +fi + unset EMAIL while [ -z ${EMAIL} ]; do - read -p "Email Address: " EMAIL + read -p "Email Address (for LetsEncrypt): " EMAIL done wait_seconds 2 @@ -227,9 +267,10 @@ echo "-----------------------------------------------------------------" echo " domain: $NETMAKER_BASE_DOMAIN" echo " email: $EMAIL" echo " public ip: $SERVER_PUBLIC_IP" -echo " license: $LICENSE_KEY" -echo " account id: $ACCOUNT_ID" - +if [ "$INSTALL_TYPE" = "ee" ]; then + echo " license: $LICENSE_KEY" + echo " account id: $ACCOUNT_ID" +fi echo "-----------------------------------------------------------------" echo "Confirm Settings for Installation" echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" @@ -244,7 +285,13 @@ echo "-----------------------------------------------------------------" wait_seconds 3 echo "Pulling config files..." -wget -O docker-compose.yml https://raw.githubusercontent.com/gravitl/netmaker/master/compose/docker-compose.ee.yml && wget -O /root/mosquitto.conf https://raw.githubusercontent.com/gravitl/netmaker/master/docker/mosquitto.conf && wget -q -O /root/wait.sh https://raw.githubusercontent.com/gravitl/netmaker/develop/docker/wait.sh && chmod +x wait.sh + +COMPOSE_URL="https://raw.githubusercontent.com/gravitl/netmaker/master/compose/docker-compose.yml" +if [ "$INSTALL_TYPE" = "ee" ]; then + COMPOSE_URL="https://raw.githubusercontent.com/gravitl/netmaker/master/compose/docker-compose.ee.yml" +fi + +wget -O docker-compose.yml $COMPOSE_URL && wget -O /root/mosquitto.conf https://raw.githubusercontent.com/gravitl/netmaker/master/docker/mosquitto.conf && wget -q -O /root/wait.sh https://raw.githubusercontent.com/gravitl/netmaker/develop/docker/wait.sh && chmod +x wait.sh mkdir -p /etc/netmaker @@ -255,9 +302,10 @@ sed -i "s/SERVER_PUBLIC_IP/$SERVER_PUBLIC_IP/g" /root/docker-compose.yml sed -i "s/REPLACE_MASTER_KEY/$MASTER_KEY/g" /root/docker-compose.yml sed -i "s/YOUR_EMAIL/$EMAIL/g" /root/docker-compose.yml sed -i "s/REPLACE_MQ_ADMIN_PASSWORD/$MQ_PASSWORD/g" /root/docker-compose.yml -sed -i "s~YOUR_LICENSE_KEY~$LICENSE_KEY~g" /root/docker-compose.yml -sed -i "s/YOUR_ACCOUNT_ID/$ACCOUNT_ID/g" /root/docker-compose.yml - +if [ "$INSTALL_TYPE" = "ee" ]; then + sed -i "s~YOUR_LICENSE_KEY~$LICENSE_KEY~g" /root/docker-compose.yml + sed -i "s/YOUR_ACCOUNT_ID/$ACCOUNT_ID/g" /root/docker-compose.yml +fi echo "Starting containers..." docker-compose -f /root/docker-compose.yml up -d From 55d1b3dc63edbf04e9a5d524c7b32c596b24c72b Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Fri, 4 Nov 2022 14:50:54 -0400 Subject: [PATCH 22/48] updated version to v0.16.3 --- .github/ISSUE_TEMPLATE/bug-report.yml | 1 + README.md | 2 +- compose/docker-compose.ee.yml | 4 ++-- compose/docker-compose.reference.yml | 4 ++-- compose/docker-compose.yml | 4 ++-- controllers/docs.go | 2 +- k8s/client/netclient-daemonset.yaml | 2 +- k8s/client/netclient.yaml | 2 +- k8s/server/netmaker-server.yaml | 2 +- k8s/server/netmaker-ui.yaml | 2 +- netclient/netclient.exe.manifest.xml | 2 +- netclient/versioninfo.json | 6 +++--- swagger.yaml | 2 +- 13 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 67aa5d93..47868b91 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -31,6 +31,7 @@ body: label: Version description: What version are you running? options: + - v0.16.3 - v0.16.2 - v0.16.1 - v0.16.0 diff --git a/README.md b/README.md index 9624df1b..e247bda7 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@

- + diff --git a/compose/docker-compose.ee.yml b/compose/docker-compose.ee.yml index ece6e38c..8cde21c3 100644 --- a/compose/docker-compose.ee.yml +++ b/compose/docker-compose.ee.yml @@ -3,7 +3,7 @@ version: "3.4" services: netmaker: container_name: netmaker - image: gravitl/netmaker:v0.16.2-ee + image: gravitl/netmaker:v0.16.3-ee cap_add: - NET_ADMIN - NET_RAW @@ -55,7 +55,7 @@ services: - traefik.http.services.netmaker-api.loadbalancer.server.port=8081 netmaker-ui: container_name: netmaker-ui - image: gravitl/netmaker-ui:v0.16.2 + image: gravitl/netmaker-ui:v0.16.3 depends_on: - netmaker links: diff --git a/compose/docker-compose.reference.yml b/compose/docker-compose.reference.yml index 17438cac..716908e3 100644 --- a/compose/docker-compose.reference.yml +++ b/compose/docker-compose.reference.yml @@ -3,7 +3,7 @@ version: "3.4" services: netmaker: # The Primary Server for running Netmaker container_name: netmaker - image: gravitl/netmaker:v0.16.2 + image: gravitl/netmaker:v0.16.3 cap_add: - NET_ADMIN - NET_RAW @@ -62,7 +62,7 @@ services: - traefik.http.services.netmaker-api.loadbalancer.server.port=8081 netmaker-ui: # The Netmaker UI Component container_name: netmaker-ui - image: gravitl/netmaker-ui:v0.16.2 + image: gravitl/netmaker-ui:v0.16.3 depends_on: - netmaker links: diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index d85dfa70..994299c6 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.4" services: netmaker: container_name: netmaker - image: gravitl/netmaker:v0.16.2 + image: gravitl/netmaker:v0.16.3 cap_add: - NET_ADMIN - NET_RAW @@ -53,7 +53,7 @@ services: - traefik.http.services.netmaker-api.loadbalancer.server.port=8081 netmaker-ui: container_name: netmaker-ui - image: gravitl/netmaker-ui:v0.16.2 + image: gravitl/netmaker-ui:v0.16.3 depends_on: - netmaker links: diff --git a/controllers/docs.go b/controllers/docs.go index 427d4ace..a030cb6f 100644 --- a/controllers/docs.go +++ b/controllers/docs.go @@ -10,7 +10,7 @@ // // Schemes: https // BasePath: / -// Version: 0.16.2 +// Version: 0.16.3 // Host: netmaker.io // // Consumes: diff --git a/k8s/client/netclient-daemonset.yaml b/k8s/client/netclient-daemonset.yaml index b345e054..f90997ab 100644 --- a/k8s/client/netclient-daemonset.yaml +++ b/k8s/client/netclient-daemonset.yaml @@ -16,7 +16,7 @@ spec: hostNetwork: true containers: - name: netclient - image: gravitl/netclient:v0.16.2 + image: gravitl/netclient:v0.16.3 env: - name: TOKEN value: "TOKEN_VALUE" diff --git a/k8s/client/netclient.yaml b/k8s/client/netclient.yaml index a8097ad2..20c5217a 100644 --- a/k8s/client/netclient.yaml +++ b/k8s/client/netclient.yaml @@ -28,7 +28,7 @@ spec: # - "" containers: - name: netclient - image: gravitl/netclient:v0.16.2 + image: gravitl/netclient:v0.16.3 env: - name: TOKEN value: "TOKEN_VALUE" diff --git a/k8s/server/netmaker-server.yaml b/k8s/server/netmaker-server.yaml index f4820f3b..6ec14d96 100644 --- a/k8s/server/netmaker-server.yaml +++ b/k8s/server/netmaker-server.yaml @@ -83,7 +83,7 @@ spec: value: "Kubernetes" - name: VERBOSITY value: "3" - image: gravitl/netmaker:v0.16.2 + image: gravitl/netmaker:v0.16.3 imagePullPolicy: Always name: netmaker ports: diff --git a/k8s/server/netmaker-ui.yaml b/k8s/server/netmaker-ui.yaml index 5f80bb63..15355d66 100644 --- a/k8s/server/netmaker-ui.yaml +++ b/k8s/server/netmaker-ui.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: netmaker-ui - image: gravitl/netmaker-ui:v0.16.2 + image: gravitl/netmaker-ui:v0.16.3 ports: - containerPort: 443 env: diff --git a/netclient/netclient.exe.manifest.xml b/netclient/netclient.exe.manifest.xml index e23ebdd4..61fb25ad 100644 --- a/netclient/netclient.exe.manifest.xml +++ b/netclient/netclient.exe.manifest.xml @@ -1,7 +1,7 @@ ” There are two methods to obtain YOUR_SECRET_KEY: 1. Using the masterkey. By default, this value is “secret key,” but you should change this on your instance and keep it secure. This value can be set via env var at startup or in a config file (config/environments/< env >.yaml). See the [Netmaker](https://docs.netmaker.org/index.html) documentation for more details. 2. Using a JWT received for a node. This can be retrieved by calling the /api/nodes//authenticate endpoint, as documented below. title: Netmaker - version: 0.16.2 + version: 0.16.3 paths: /api/dns: get: From ea4beb34f4f615d5972dc9d6157cfabb1b486dca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 23:13:15 +0000 Subject: [PATCH 23/48] Bump github.com/urfave/cli/v2 from 2.23.0 to 2.23.4 Bumps [github.com/urfave/cli/v2](https://github.com/urfave/cli) from 2.23.0 to 2.23.4. - [Release notes](https://github.com/urfave/cli/releases) - [Changelog](https://github.com/urfave/cli/blob/main/docs/CHANGELOG.md) - [Commits](https://github.com/urfave/cli/compare/v2.23.0...v2.23.4) --- updated-dependencies: - dependency-name: github.com/urfave/cli/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 40ef133a..fd51b17f 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/stretchr/testify v1.8.1 github.com/txn2/txeh v1.3.0 - github.com/urfave/cli/v2 v2.23.0 + github.com/urfave/cli/v2 v2.23.4 golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b // indirect golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 diff --git a/go.sum b/go.sum index 66d91754..82b50fad 100644 --- a/go.sum +++ b/go.sum @@ -465,8 +465,8 @@ github.com/txn2/txeh v1.3.0/go.mod h1:O7M6gUTPeMF+vsa4c4Ipx3JDkOYrruB1Wry8QRsMcw github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg= -github.com/urfave/cli/v2 v2.23.0 h1:pkly7gKIeYv3olPAeNajNpLjeJrmTPYCoZWaV+2VfvE= -github.com/urfave/cli/v2 v2.23.0/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI= +github.com/urfave/cli/v2 v2.23.4 h1:gcaHwki8kGX6lfp2zz7irxu7eZkcIl1Xapt6XW0Ynqc= +github.com/urfave/cli/v2 v2.23.4/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= From b7ae6c6d351346a7c358257027e6fa617667a073 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 9 Nov 2022 14:35:26 -0500 Subject: [PATCH 24/48] moved ee check out of ce --- logic/security.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logic/security.go b/logic/security.go index 2f013804..e373d722 100644 --- a/logic/security.go +++ b/logic/security.go @@ -162,7 +162,7 @@ func UserPermissions(reqAdmin bool, netname string, token string) ([]string, str if len(netname) > 0 && (!authenticateNetworkUser(netname, userNetworks) || len(userNetworks) == 0) { return nil, username, Unauthorized_Err } - if !pro.IsUserNetAdmin(netname, username) { + if isEE && !pro.IsUserNetAdmin(netname, username) { return nil, "", Unauthorized_Err } return userNetworks, username, nil From a79844e0905993d1103ed7dfe66c219c37deb3e5 Mon Sep 17 00:00:00 2001 From: shanker JJ Date: Sun, 23 Oct 2022 16:36:16 +0900 Subject: [PATCH 25/48] Adding support for OpenWrt-mips arch --- netclient/bin-maker.sh | 2 +- scripts/netclient-install.sh | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/netclient/bin-maker.sh b/netclient/bin-maker.sh index 10988606..d86c4fee 100755 --- a/netclient/bin-maker.sh +++ b/netclient/bin-maker.sh @@ -20,7 +20,7 @@ function build build $_goarch $_goose 5 && build $_goarch $_goose 6 && build $_goarch $_goose 7 else echo $_out - GOARM=$_goarm GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out + if [ "$_goarch" == "mips" ]; then GOMIPS=softfloat; fi; GOARM=$_goarm GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out fi } diff --git a/scripts/netclient-install.sh b/scripts/netclient-install.sh index e49c5515..91992ce0 100755 --- a/scripts/netclient-install.sh +++ b/scripts/netclient-install.sh @@ -148,8 +148,11 @@ case $(uname | tr A-Z a-z) in arm*) dist=netclient-$CPU_ARCH ;; - mipsle) + mipsle) dist=netclient-mipsle + ;; + mips*) + dist=netclient-$CPU_ARCH ;; *) fatal "$CPU_ARCH : cpu architecture not supported" @@ -240,6 +243,8 @@ if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; then else wget $curl_opts -O netclient.service.tmp https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/openwrt-daemon.sh fi + elif [ "${OS}" = "OpenWRT" ] && [ "$CPU_ARCH" = "mips" ]; then + wget $curl_opts -O netclient.service.tmp https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/openwrt-daemon.sh else cat << 'END_OF_FILE' > ./netclient.service.tmp #!/bin/sh /etc/rc.common @@ -292,5 +297,4 @@ END_OF_FILE /etc/init.d/netclient start else rm -f netclient -fi - +fi \ No newline at end of file From 9cce634cd880ca417ff3fd44c802c19b477ba39a Mon Sep 17 00:00:00 2001 From: shanker JJ Date: Mon, 24 Oct 2022 11:10:32 +0900 Subject: [PATCH 26/48] Adding support in workflow to uploade mips binary in release --- .github/workflows/buildandrelease.yml | 42 +++++++++++++++++++++++++++ netclient/bin-maker.sh | 6 +++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/.github/workflows/buildandrelease.yml b/.github/workflows/buildandrelease.yml index 9b9b4fc2..eb4a3ac0 100644 --- a/.github/workflows/buildandrelease.yml +++ b/.github/workflows/buildandrelease.yml @@ -306,6 +306,48 @@ jobs: prerelease: true asset_name: netclient-mipsle + netclient-mips: + runs-on: ubuntu-latest + needs: version + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set Variables + run: | + TAG=${{needs.version.outputs.tag}} + VERSION=${{needs.version.outputs.version}} + echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV + echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV + - name: Setup go + uses: actions/setup-go@v2 + with: + go-version: 1.18 + - name: Build + run: | + cd netclient + env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mips/netclient main.go + env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mips-upx/netclient main.go && upx build/netclient-mips-upx/netclient + + - name: Upload mips to Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: netclient/build/netclient-mips/netclient + tag: ${{ env.NETMAKER_VERSION }} + overwrite: true + prerelease: true + asset_name: netclient-mips + + - name: Upload upx compressed version of mips to Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: netclient/build/netclient-mips-upx/netclient + tag: ${{ env.NETMAKER_VERSION }} + overwrite: true + prerelease: true + asset_name: netclient-mips-upx + netclient-freebsd: runs-on: ubuntu-latest needs: version diff --git a/netclient/bin-maker.sh b/netclient/bin-maker.sh index d86c4fee..00f59e3b 100755 --- a/netclient/bin-maker.sh +++ b/netclient/bin-maker.sh @@ -20,7 +20,11 @@ function build build $_goarch $_goose 5 && build $_goarch $_goose 6 && build $_goarch $_goose 7 else echo $_out - if [ "$_goarch" == "mips" ]; then GOMIPS=softfloat; fi; GOARM=$_goarm GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out + if [ "$_goarch" == "mips" ]; then + GOARM=$_goarm GOMIPS=softfloat GOARCH=mipsle GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out + else + GOARM=$_goarm GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out + fi fi } From 3f5675688cd5ba4f8d882be0f2bbb9d4c11f142a Mon Sep 17 00:00:00 2001 From: shanker JJ Date: Tue, 25 Oct 2022 06:35:19 +0900 Subject: [PATCH 27/48] Adding comment in bin-maker.sh --- netclient/bin-maker.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/netclient/bin-maker.sh b/netclient/bin-maker.sh index 00f59e3b..05808fa4 100755 --- a/netclient/bin-maker.sh +++ b/netclient/bin-maker.sh @@ -21,6 +21,7 @@ function build else echo $_out if [ "$_goarch" == "mips" ]; then + # If the binary created through `GOMIPS=softfloat GOARCH=mipsle` is not compatible with your hardware, try changing these variables and creating a binary file compatible with your hardware. GOARM=$_goarm GOMIPS=softfloat GOARCH=mipsle GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out else GOARM=$_goarm GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out From 78b0476aa4b503142b6d62d54e6d6494215664d5 Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Wed, 9 Nov 2022 20:04:13 +0530 Subject: [PATCH 28/48] change mosquitto protocol from mqtts to wss --- compose/docker-compose.ee.yml | 8 ++++---- compose/docker-compose.reference.yml | 10 +++++----- compose/docker-compose.yml | 8 ++++---- docker/mosquitto.conf | 1 + netclient/functions/daemon.go | 4 ++-- servercfg/serverconf.go | 2 +- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/compose/docker-compose.ee.yml b/compose/docker-compose.ee.yml index 8cde21c3..50899045 100644 --- a/compose/docker-compose.ee.yml +++ b/compose/docker-compose.ee.yml @@ -125,10 +125,10 @@ services: - "8883" labels: - traefik.enable=true - - traefik.tcp.routers.mqtt.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) - - traefik.tcp.routers.mqtt.tls.certresolver=http - - traefik.tcp.services.mqtt.loadbalancer.server.port=8883 - - traefik.tcp.routers.mqtt.entrypoints=websecure + - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) + - traefik.http.routers.mqtt_websocket.entrypoints=websocket + - traefik.http.routers.mqtt_websocket.tls.certresolver=http + - traefik.http.services.mqtt_websocket.loadbalancer.server.port=8883 prometheus: container_name: prometheus image: gravitl/netmaker-prometheus:latest diff --git a/compose/docker-compose.reference.yml b/compose/docker-compose.reference.yml index 716908e3..419a8f5c 100644 --- a/compose/docker-compose.reference.yml +++ b/compose/docker-compose.reference.yml @@ -129,11 +129,11 @@ services: - "8883" labels: - traefik.enable=true - - traefik.tcp.routers.mqtts.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) - - traefik.tcp.routers.mqtts.tls.passthrough=true - - traefik.tcp.services.mqtts-svc.loadbalancer.server.port=8883 - - traefik.tcp.routers.mqtts.service=mqtts-svc - - traefik.tcp.routers.mqtts.entrypoints=websecure + - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) + - traefik.http.routers.mqtt_websocket.entrypoints=websocket + - traefik.http.routers.mqtt_websocket.tls.passthrough=true + - traefik.http.services.mqtts-svc.loadbalancer.server.port=8883 + - traefik.http.routers.mqtt_websocket.service=mqtts-svc volumes: traefik_certs: {} # ssl certificates - auto generated shared_certs: {} # netmaker certs generated for MQ comms - used by nodes/servers diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index 994299c6..71a24ebe 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -123,10 +123,10 @@ services: - "8883" labels: - traefik.enable=true - - traefik.tcp.routers.mqtt.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) - - traefik.tcp.routers.mqtt.tls.certresolver=http - - traefik.tcp.services.mqtt.loadbalancer.server.port=8883 - - traefik.tcp.routers.mqtt.entrypoints=websecure + - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) + - traefik.http.routers.mqtt_websocket.entrypoints=websocket + - traefik.http.routers.mqtt_websocket.tls.certresolver=http + - traefik.http.services.mqtt_websocket.loadbalancer.server.port=8883 volumes: traefik_certs: {} sqldata: {} diff --git a/docker/mosquitto.conf b/docker/mosquitto.conf index 299f632f..e7b92103 100644 --- a/docker/mosquitto.conf +++ b/docker/mosquitto.conf @@ -1,5 +1,6 @@ per_listener_settings false listener 8883 +protocol websockets allow_anonymous false listener 1883 diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index 12b3ddbe..6b493506 100644 --- a/netclient/functions/daemon.go +++ b/netclient/functions/daemon.go @@ -212,7 +212,7 @@ func setupMQTTSingleton(cfg *config.ClientConfig) error { if err != nil { return fmt.Errorf("could not read secrets file %w", err) } - opts.AddBroker("mqtts://" + server + ":" + port) + opts.AddBroker("wss://" + server + ":" + port) opts.SetUsername(cfg.Node.ID) opts.SetPassword(string(pass)) mqclient = mqtt.NewClient(opts) @@ -239,7 +239,7 @@ func setupMQTT(cfg *config.ClientConfig) error { if err != nil { return fmt.Errorf("could not read secrets file %w", err) } - opts.AddBroker(fmt.Sprintf("mqtts://%s:%s", server, port)) + opts.AddBroker(fmt.Sprintf("wss://%s:%s", server, port)) opts.SetUsername(cfg.Node.ID) opts.SetPassword(string(pass)) opts.SetClientID(ncutils.MakeRandomString(23)) diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index 39582592..e3c4774c 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -236,7 +236,7 @@ func GetMessageQueueEndpoint() (string, bool) { } else if config.Config.Server.MQHOST != "" { host = config.Config.Server.MQHOST } - secure := strings.Contains(host, "mqtts") || strings.Contains(host, "ssl") + secure := strings.Contains(host, "wss") || strings.Contains(host, "ssl") return host + ":" + GetMQServerPort(), secure } From 5c5ee176b6a93c4f73d4bbb6270b625e2236026a Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Thu, 10 Nov 2022 12:04:37 +0530 Subject: [PATCH 29/48] use websockets on port 1883 --- docker/mosquitto.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/mosquitto.conf b/docker/mosquitto.conf index e7b92103..19597b80 100644 --- a/docker/mosquitto.conf +++ b/docker/mosquitto.conf @@ -4,6 +4,7 @@ protocol websockets allow_anonymous false listener 1883 +protocol websockets allow_anonymous false plugin /usr/lib/mosquitto_dynamic_security.so From c704c8e75baa86e3cd75cfeb1e76464d50a917c9 Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Thu, 10 Nov 2022 12:07:49 +0530 Subject: [PATCH 30/48] change entrypoint to websecure --- compose/docker-compose.ee.yml | 2 +- compose/docker-compose.reference.yml | 2 +- compose/docker-compose.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compose/docker-compose.ee.yml b/compose/docker-compose.ee.yml index 50899045..4a4a84ea 100644 --- a/compose/docker-compose.ee.yml +++ b/compose/docker-compose.ee.yml @@ -126,7 +126,7 @@ services: labels: - traefik.enable=true - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) - - traefik.http.routers.mqtt_websocket.entrypoints=websocket + - traefik.http.routers.mqtt_websocket.entrypoints=websecure - traefik.http.routers.mqtt_websocket.tls.certresolver=http - traefik.http.services.mqtt_websocket.loadbalancer.server.port=8883 prometheus: diff --git a/compose/docker-compose.reference.yml b/compose/docker-compose.reference.yml index 419a8f5c..a04e8c23 100644 --- a/compose/docker-compose.reference.yml +++ b/compose/docker-compose.reference.yml @@ -130,7 +130,7 @@ services: labels: - traefik.enable=true - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) - - traefik.http.routers.mqtt_websocket.entrypoints=websocket + - traefik.http.routers.mqtt_websocket.entrypoints=websecure - traefik.http.routers.mqtt_websocket.tls.passthrough=true - traefik.http.services.mqtts-svc.loadbalancer.server.port=8883 - traefik.http.routers.mqtt_websocket.service=mqtts-svc diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index 71a24ebe..a0ca091a 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -124,7 +124,7 @@ services: labels: - traefik.enable=true - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) - - traefik.http.routers.mqtt_websocket.entrypoints=websocket + - traefik.http.routers.mqtt_websocket.entrypoints=websecure - traefik.http.routers.mqtt_websocket.tls.certresolver=http - traefik.http.services.mqtt_websocket.loadbalancer.server.port=8883 volumes: From 56142f29e1269c2f0f488bfaed9b2d98925d3594 Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Thu, 10 Nov 2022 16:59:15 +0530 Subject: [PATCH 31/48] change HostSNI to Host --- compose/docker-compose.ee.yml | 2 +- compose/docker-compose.reference.yml | 2 +- compose/docker-compose.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compose/docker-compose.ee.yml b/compose/docker-compose.ee.yml index 4a4a84ea..3e6937c6 100644 --- a/compose/docker-compose.ee.yml +++ b/compose/docker-compose.ee.yml @@ -125,7 +125,7 @@ services: - "8883" labels: - traefik.enable=true - - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) + - traefik.http.routers.mqtt_websocket.rule=Host(`broker.NETMAKER_BASE_DOMAIN`) - traefik.http.routers.mqtt_websocket.entrypoints=websecure - traefik.http.routers.mqtt_websocket.tls.certresolver=http - traefik.http.services.mqtt_websocket.loadbalancer.server.port=8883 diff --git a/compose/docker-compose.reference.yml b/compose/docker-compose.reference.yml index a04e8c23..0008c9e1 100644 --- a/compose/docker-compose.reference.yml +++ b/compose/docker-compose.reference.yml @@ -129,7 +129,7 @@ services: - "8883" labels: - traefik.enable=true - - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) + - traefik.http.routers.mqtt_websocket.rule=Host(`broker.NETMAKER_BASE_DOMAIN`) - traefik.http.routers.mqtt_websocket.entrypoints=websecure - traefik.http.routers.mqtt_websocket.tls.passthrough=true - traefik.http.services.mqtts-svc.loadbalancer.server.port=8883 diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index a0ca091a..e60dc040 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -123,7 +123,7 @@ services: - "8883" labels: - traefik.enable=true - - traefik.http.routers.mqtt_websocket.rule=HostSNI(`broker.NETMAKER_BASE_DOMAIN`) + - traefik.http.routers.mqtt_websocket.rule=Host(`broker.NETMAKER_BASE_DOMAIN`) - traefik.http.routers.mqtt_websocket.entrypoints=websecure - traefik.http.routers.mqtt_websocket.tls.certresolver=http - traefik.http.services.mqtt_websocket.loadbalancer.server.port=8883 From dfd5961c6cc1856a05ef1b67779c4a836cd9a86d Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Thu, 10 Nov 2022 18:45:14 +0530 Subject: [PATCH 32/48] update server connection --- servercfg/serverconf.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index e3c4774c..547eea2f 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -237,6 +237,11 @@ func GetMessageQueueEndpoint() (string, bool) { host = config.Config.Server.MQHOST } secure := strings.Contains(host, "wss") || strings.Contains(host, "ssl") + if secure { + host = "wss://" + host + } else { + host = "ws://" + host + } return host + ":" + GetMQServerPort(), secure } From 31990fca45ff56a96fca3702d93ba0657e8e334b Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Thu, 10 Nov 2022 14:54:53 -0500 Subject: [PATCH 33/48] fixed admin issue and potential panics --- controllers/ext_client.go | 2 +- controllers/network.go | 2 +- logic/auth.go | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index 3ac9a05f..9ca316c7 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -101,7 +101,7 @@ func getAllExtClients(w http.ResponseWriter, r *http.Request) { } clients := []models.ExtClient{} var err error - if networksSlice[0] == logic.ALL_NETWORK_ACCESS { + if len(networksSlice) > 0 && networksSlice[0] == logic.ALL_NETWORK_ACCESS { clients, err = functions.GetAllExtClients() if err != nil && !database.IsEmptyRecord(err) { logger.Log(0, "failed to get all extclients: ", err.Error()) diff --git a/controllers/network.go b/controllers/network.go index a91b5164..8121ef8f 100644 --- a/controllers/network.go +++ b/controllers/network.go @@ -57,7 +57,7 @@ func getNetworks(w http.ResponseWriter, r *http.Request) { } allnetworks := []models.Network{} var err error - if networksSlice[0] == logic.ALL_NETWORK_ACCESS { + if len(networksSlice) > 0 && networksSlice[0] == logic.ALL_NETWORK_ACCESS { allnetworks, err = logic.GetNetworks() if err != nil && !database.IsEmptyRecord(err) { logger.Log(0, r.Header.Get("user"), "failed to fetch networks: ", err.Error()) diff --git a/logic/auth.go b/logic/auth.go index 371833e9..e6a24608 100644 --- a/logic/auth.go +++ b/logic/auth.go @@ -282,6 +282,9 @@ func UpdateUser(userchange models.User, user models.User) (models.User, error) { user.Password = userchange.Password } + if userchange.IsAdmin != user.IsAdmin { + user.IsAdmin = userchange.IsAdmin + } err := ValidateUser(user) if err != nil { From ab206810f9aaac2f8532057750fb5f9b80daa30d Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Thu, 10 Nov 2022 15:04:14 -0500 Subject: [PATCH 34/48] updated traefix and moquitto images in compose files added docker and github actions to dependabot --- .github/dependabot.yml | 12 ++++++++++++ compose/docker-compose.ee.yml | 4 ++-- compose/docker-compose.reference.yml | 4 ++-- compose/docker-compose.yml | 4 ++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7c70f02c..b52b304f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,3 +16,15 @@ updates: schedule: interval: "weekly" target-branch: "develop" + # Enable version updates for GitHubActions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + target-branch: "develop" + # Enable version updates for docker images + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" + target-branch: "develop" diff --git a/compose/docker-compose.ee.yml b/compose/docker-compose.ee.yml index 3e6937c6..fc8bf8fb 100644 --- a/compose/docker-compose.ee.yml +++ b/compose/docker-compose.ee.yml @@ -88,7 +88,7 @@ services: volumes: - dnsconfig:/root/dnsconfig traefik: - image: traefik:v2.6 + image: traefik:v2.9 container_name: traefik command: - "--certificatesresolvers.http.acme.email=YOUR_EMAIL" @@ -109,7 +109,7 @@ services: - "443:443" mq: container_name: mq - image: eclipse-mosquitto:2.0.11-openssl + image: eclipse-mosquitto:2.0.15-openssl depends_on: - netmaker restart: unless-stopped diff --git a/compose/docker-compose.reference.yml b/compose/docker-compose.reference.yml index 0008c9e1..aaf793cb 100644 --- a/compose/docker-compose.reference.yml +++ b/compose/docker-compose.reference.yml @@ -95,7 +95,7 @@ services: volumes: - dnsconfig:/root/dnsconfig traefik: # the default proxy - can be replaced with caddy or nginx, but requires careful configuration - image: traefik:v2.6 + image: traefik:v2.9 container_name: traefik command: - "--certificatesresolvers.http.acme.email=YOUR_EMAIL" @@ -116,7 +116,7 @@ services: - "443:443" mq: # the MQTT broker for netmaker container_name: mq - image: eclipse-mosquitto:2.0.11-openssl + image: eclipse-mosquitto:2.0.15-openssl depends_on: - netmaker restart: unless-stopped diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index e60dc040..1a01c047 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -86,7 +86,7 @@ services: volumes: - dnsconfig:/root/dnsconfig traefik: - image: traefik:v2.6 + image: traefik:v2.9 container_name: traefik command: - "--certificatesresolvers.http.acme.email=YOUR_EMAIL" @@ -107,7 +107,7 @@ services: - "443:443" mq: container_name: mq - image: eclipse-mosquitto:2.0.11-openssl + image: eclipse-mosquitto:2.0.15-openssl depends_on: - netmaker restart: unless-stopped From c185d895948e3c3682adc34e1d2fd63ee5474e62 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Thu, 10 Nov 2022 10:52:44 -0500 Subject: [PATCH 35/48] add ee build to docker-publish workflow and ... updated actions to latest versions --- .github/workflows/buildandrelease.yml | 16 ++-- .github/workflows/docker-builder.yml | 6 +- .github/workflows/publish-docker.yml | 94 +++++++++---------- .../publish-netclient-docker-userspace.yml | 8 +- .../workflows/publish-netclient-docker.yml | 8 +- .github/workflows/purgeGHCR.yml | 2 +- .github/workflows/test.yml | 10 +- 7 files changed, 69 insertions(+), 75 deletions(-) diff --git a/.github/workflows/buildandrelease.yml b/.github/workflows/buildandrelease.yml index eb4a3ac0..89724d50 100644 --- a/.github/workflows/buildandrelease.yml +++ b/.github/workflows/buildandrelease.yml @@ -53,7 +53,7 @@ jobs: echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup go uses: actions/setup-go@v2 with: @@ -76,7 +76,7 @@ jobs: needs: version steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} @@ -180,7 +180,7 @@ jobs: needs: version steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} @@ -280,7 +280,7 @@ jobs: needs: version steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} @@ -311,7 +311,7 @@ jobs: needs: version steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} @@ -353,7 +353,7 @@ jobs: needs: version steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} @@ -428,7 +428,7 @@ jobs: needs: version steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} @@ -480,7 +480,7 @@ jobs: needs: version steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} diff --git a/.github/workflows/docker-builder.yml b/.github/workflows/docker-builder.yml index 90677b59..c5164a63 100644 --- a/.github/workflows/docker-builder.yml +++ b/.github/workflows/docker-builder.yml @@ -10,11 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: SetUp Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to Dockerhub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index 21b7986c..55da5bde 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -26,70 +26,64 @@ jobs: echo "TAG=${TAG}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build x86 and export to Docker - uses: docker/build-push-action@v2 - with: - context: . - load: true - platforms: linux/amd64 - tags: ${{ env.TAG }} - build-args: version=${{ env.TAG }} - - - name: Test x86 - run: | - docker run --rm ${{ env.TAG }}& - sleep 10 - kill %1 - - - name: Build arm64 and export to Docker - uses: docker/build-push-action@v2 - with: - context: . - load: true - platforms: linux/arm64 - tags: ${{ env.TAG }} - build-args: version=${{ env.TAG }} - - - name: Test arm64 - run: | - docker run --rm ${{ env.TAG }}& - sleep 10 - kill %1 - - - name: Build armv7l and export to Docker - uses: docker/build-push-action@v2 - with: - context: . - load: true - platforms: linux/arm/v7 - tags: ${{ env.TAG }} - build-args: version=${{ env.TAG }} - - - name: Test armv7l - run: | - docker run --rm ${{ env.TAG }}& - sleep 10 - kill %1 - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: . platforms: linux/amd64, linux/arm64, linux/arm/v7 push: true tags: ${{ github.repository }}:${{ env.TAG }}, ${{ github.repository }}:latest build-args: version=${{ env.TAG }} + + docker-ee: + runs-on: ubuntu-latest + steps: + - + name: Set tag + run: | + if [[ -n "${{ github.event.inputs.tag }}" ]]; then + TAG=${{ github.event.inputs.tag }} + elif [[ "${{ github.ref_name }}" == 'master' ]]; then + TAG="latest" + else + TAG="${{ github.ref_name }}" + fi + echo "TAG=${TAG}" >> $GITHUB_ENV + - + name: Checkout + uses: actions/checkout@v3 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - + name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64, linux/arm64, linux/arm/v7 + push: true + tags: ${{ github.repository }}:${{ env.TAG }}-ee + build-args: version=${{ env.TAG }}, tags="-tags=ee" diff --git a/.github/workflows/publish-netclient-docker-userspace.yml b/.github/workflows/publish-netclient-docker-userspace.yml index eef20ea6..b0dc7c4b 100644 --- a/.github/workflows/publish-netclient-docker-userspace.yml +++ b/.github/workflows/publish-netclient-docker-userspace.yml @@ -26,16 +26,16 @@ jobs: echo "TAG=${TAG}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/publish-netclient-docker.yml b/.github/workflows/publish-netclient-docker.yml index 02f7edcb..5dbd0319 100644 --- a/.github/workflows/publish-netclient-docker.yml +++ b/.github/workflows/publish-netclient-docker.yml @@ -26,16 +26,16 @@ jobs: echo "TAG=${TAG}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/purgeGHCR.yml b/.github/workflows/purgeGHCR.yml index 590a858f..09edb8ba 100644 --- a/.github/workflows/purgeGHCR.yml +++ b/.github/workflows/purgeGHCR.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Prune Netmaker uses: vlaurin/action-ghcr-prune@main with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f3c75861..4685294b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Go uses: actions/setup-go@v2 with: @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Go uses: actions/setup-go@v2 with: @@ -40,7 +40,7 @@ jobs: runs-on: macos-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Go uses: actions/setup-go@v2 with: @@ -52,7 +52,7 @@ jobs: runs-on: windows-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Go uses: actions/setup-go@v2 with: @@ -72,7 +72,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Go uses: actions/setup-go@v2 with: From 0708de75c7766b6a5a63018501bce9e42c431d4d Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Mon, 14 Nov 2022 08:56:12 -0500 Subject: [PATCH 36/48] update github actions version missed in earlier PR --- .github/workflows/docker-builder.yml | 2 +- .github/workflows/publish-docker.yml | 6 +++--- .github/workflows/publish-netclient-docker-userspace.yml | 2 +- .github/workflows/publish-netclient-docker.yml | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker-builder.yml b/.github/workflows/docker-builder.yml index c5164a63..1377e609 100644 --- a/.github/workflows/docker-builder.yml +++ b/.github/workflows/docker-builder.yml @@ -19,7 +19,7 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push to docker hub - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: . push: true diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index 55da5bde..d5f3b2d5 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -56,7 +56,7 @@ jobs: name: Set tag run: | if [[ -n "${{ github.event.inputs.tag }}" ]]; then - TAG=${{ github.event.inputs.tag }} + docker/build-push-action@v3.tag }} elif [[ "${{ github.ref_name }}" == 'master' ]]; then TAG="latest" else @@ -71,7 +71,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/build-push-action@v3v2 - name: Login to DockerHub uses: docker/login-action@v2 @@ -86,4 +86,4 @@ jobs: platforms: linux/amd64, linux/arm64, linux/arm/v7 push: true tags: ${{ github.repository }}:${{ env.TAG }}-ee - build-args: version=${{ env.TAG }}, tags="-tags=ee" + buildocker/build-push-action@v3 }}, tags="-tags=ee" diff --git a/.github/workflows/publish-netclient-docker-userspace.yml b/.github/workflows/publish-netclient-docker-userspace.yml index b0dc7c4b..2c6f7a38 100644 --- a/.github/workflows/publish-netclient-docker-userspace.yml +++ b/.github/workflows/publish-netclient-docker-userspace.yml @@ -41,7 +41,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: . platforms: linux/amd64 diff --git a/.github/workflows/publish-netclient-docker.yml b/.github/workflows/publish-netclient-docker.yml index 5dbd0319..1e416c11 100644 --- a/.github/workflows/publish-netclient-docker.yml +++ b/.github/workflows/publish-netclient-docker.yml @@ -41,7 +41,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build x86 and export to Docker - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: . load: true @@ -57,7 +57,7 @@ jobs: kill %1 - name: Build arm64 and export to Docker - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: . load: true @@ -73,7 +73,7 @@ jobs: kill %1 - name: Build armv7l and export to Docker - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: . load: true @@ -89,7 +89,7 @@ jobs: kill %1 - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: . platforms: linux/amd64, linux/arm64, linux/arm/v7 From 16aa712b72c37382c192816994a7fe937ae766d1 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Mon, 14 Nov 2022 14:15:14 -0500 Subject: [PATCH 37/48] address review comments --- .github/workflows/publish-docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index d5f3b2d5..cc1e8a6a 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -71,7 +71,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/build-push-action@v3v2 + uses: docker/build-push-action@v3 - name: Login to DockerHub uses: docker/login-action@v2 @@ -86,4 +86,4 @@ jobs: platforms: linux/amd64, linux/arm64, linux/arm/v7 push: true tags: ${{ github.repository }}:${{ env.TAG }}-ee - buildocker/build-push-action@v3 }}, tags="-tags=ee" + build-args: version=${{ env.TAG }}, tags="-tags=ee" From 77b4cba1ca39a6c43d4e4d36d79b12d17204b296 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Thu, 10 Nov 2022 16:06:03 -0500 Subject: [PATCH 38/48] update to go 1.19 docker files need to be updated as go-builder is built on golang:1.19-alpine3.16 so base image for netmaker/netclient needs to be updated to apline3.16 as well --- .github/workflows/buildandrelease.yml | 16 ++++++++-------- .github/workflows/test.yml | 10 +++++----- Dockerfile | 2 +- docker/Dockerfile-go-builder | 2 +- docker/Dockerfile-netclient-doks | 2 +- docker/Dockerfile-netclient-doks-uspace | 2 +- docker/Dockerfile-netclient-multiarch | 2 +- docker/Dockerfile-netclient-multiarch-userspace | 2 +- go.mod | 2 +- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/buildandrelease.yml b/.github/workflows/buildandrelease.yml index 89724d50..3251b5a5 100644 --- a/.github/workflows/buildandrelease.yml +++ b/.github/workflows/buildandrelease.yml @@ -57,7 +57,7 @@ jobs: - name: Setup go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netmaker main.go @@ -86,7 +86,7 @@ jobs: - name: Setup go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build cli run: | @@ -190,7 +190,7 @@ jobs: - name: Setup go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | cd netclient @@ -290,7 +290,7 @@ jobs: - name: Setup go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | cd netclient @@ -321,7 +321,7 @@ jobs: - name: Setup go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | cd netclient @@ -363,7 +363,7 @@ jobs: - name: Setup go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | cd netclient @@ -438,7 +438,7 @@ jobs: - name: Setup go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | cd netclient @@ -491,7 +491,7 @@ jobs: - name: Setup go uses: actions/setup-go@v3 with: - go-version: 1.18 + go-version: 1.19 - name: Mysys2 setup uses: msys2/setup-msys2@v2 with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4685294b..7e258420 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build main.go @@ -31,7 +31,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build run: | sudo apt-get install -y gcc libgl1-mesa-dev xorg-dev @@ -44,7 +44,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Build mac run: | env CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -tags=gui main.go @@ -56,7 +56,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Mysys2 setup uses: msys2/setup-msys2@v2 with: @@ -76,7 +76,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: run tests run: | sudo apt-get install -y gcc libgl1-mesa-dev xorg-dev diff --git a/Dockerfile b/Dockerfile index d45080aa..faaa8a9f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ ENV GO111MODULE=auto RUN apk add git RUN GOOS=linux CGO_ENABLED=1 go build ${tags} -ldflags="-s -X 'main.version=${version}'" . # RUN go build -tags=ee . -o netmaker main.go -FROM alpine:3.15.2 +FROM alpine:3.16.2 # add a c lib RUN apk add gcompat iptables wireguard-tools diff --git a/docker/Dockerfile-go-builder b/docker/Dockerfile-go-builder index f98268e1..a9604eaf 100644 --- a/docker/Dockerfile-go-builder +++ b/docker/Dockerfile-go-builder @@ -1,4 +1,4 @@ -FROM golang:1.18.0-alpine3.15 +FROM golang:1.19-alpine3.16 ARG version RUN apk add build-base WORKDIR /app diff --git a/docker/Dockerfile-netclient-doks b/docker/Dockerfile-netclient-doks index f01ca7d8..bc9e238b 100644 --- a/docker/Dockerfile-netclient-doks +++ b/docker/Dockerfile-netclient-doks @@ -3,7 +3,7 @@ FROM debian:buster as builder RUN apt update -y && apt install -y wget bash gcc musl-dev openssl golang git build-essential libmnl-dev iptables -RUN wget -O go.tgz https://go.dev/dl/go1.18.linux-amd64.tar.gz +RUN wget -O go.tgz https://go.dev/dl/go1.19.linux-amd64.tar.gz RUN tar -C /usr/local -xzf go.tgz diff --git a/docker/Dockerfile-netclient-doks-uspace b/docker/Dockerfile-netclient-doks-uspace index ddfea0ff..0d1d5bea 100644 --- a/docker/Dockerfile-netclient-doks-uspace +++ b/docker/Dockerfile-netclient-doks-uspace @@ -3,7 +3,7 @@ FROM debian:buster as builder RUN apt update -y && apt install -y wget bash gcc musl-dev openssl golang git build-essential libmnl-dev iptables -RUN wget -O go.tgz https://go.dev/dl/go1.18.linux-amd64.tar.gz +RUN wget -O go.tgz https://go.dev/dl/go1.19.linux-amd64.tar.gz RUN tar -C /usr/local -xzf go.tgz diff --git a/docker/Dockerfile-netclient-multiarch b/docker/Dockerfile-netclient-multiarch index f2455a2f..e168d8cb 100644 --- a/docker/Dockerfile-netclient-multiarch +++ b/docker/Dockerfile-netclient-multiarch @@ -9,7 +9,7 @@ ENV GO111MODULE=auto RUN GOOS=linux CGO_ENABLED=0 /usr/local/go/bin/go build -ldflags="-X 'main.version=${version}'" -o netclient-app netclient/main.go -FROM alpine:3.15.2 +FROM alpine:3.16.2 WORKDIR /root/ diff --git a/docker/Dockerfile-netclient-multiarch-userspace b/docker/Dockerfile-netclient-multiarch-userspace index e26c988d..c4e5bfd5 100644 --- a/docker/Dockerfile-netclient-multiarch-userspace +++ b/docker/Dockerfile-netclient-multiarch-userspace @@ -24,7 +24,7 @@ RUN git clone https://git.zx2c4.com/wireguard-tools && \ make && \ make install -FROM alpine:3.13.6 +FROM alpine:3.16.2 WORKDIR /root/ diff --git a/go.mod b/go.mod index fd51b17f..47b30eaf 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/gravitl/netmaker -go 1.18 +go 1.19 require ( github.com/eclipse/paho.mqtt.golang v1.4.2 From 853b966c9bf5c6b09fa5e7c9ffdccf8a3d83a401 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Fri, 11 Nov 2022 11:28:45 -0500 Subject: [PATCH 39/48] correct connect trigger endpoint --- ee/license.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ee/license.go b/ee/license.go index eb614cb2..e7afb1fe 100644 --- a/ee/license.go +++ b/ee/license.go @@ -8,7 +8,7 @@ import ( "crypto/rand" "encoding/json" "fmt" - "io/ioutil" + "io" "math" "net/http" @@ -200,7 +200,7 @@ func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, erro return nil, fmt.Errorf("could not validate license") } // if you received a 200 cache the response locally - body, err = ioutil.ReadAll(validateResponse.Body) + body, err = io.Copy(validateResponse.Body) if err != nil { return nil, err } From 9a03c94d570ab0e4b6db7dfc286431a890ebff8c Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Fri, 11 Nov 2022 11:38:35 -0500 Subject: [PATCH 40/48] remove deprecated io/ioutil --- ee/license.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/license.go b/ee/license.go index e7afb1fe..8341c6d1 100644 --- a/ee/license.go +++ b/ee/license.go @@ -200,7 +200,7 @@ func validateLicenseKey(encryptedData []byte, publicKey *[32]byte) ([]byte, erro return nil, fmt.Errorf("could not validate license") } // if you received a 200 cache the response locally - body, err = io.Copy(validateResponse.Body) + body, err = io.ReadAll(validateResponse.Body) if err != nil { return nil, err } From c51dd3111c0cba0739a872c1ffcfcdf0ccd1b6f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 15:25:47 +0000 Subject: [PATCH 41/48] Bump fyne.io/fyne/v2 from 2.2.3 to 2.2.4 Bumps [fyne.io/fyne/v2](https://github.com/fyne-io/fyne) from 2.2.3 to 2.2.4. - [Release notes](https://github.com/fyne-io/fyne/releases) - [Changelog](https://github.com/fyne-io/fyne/blob/master/CHANGELOG.md) - [Commits](https://github.com/fyne-io/fyne/compare/v2.2.3...v2.2.4) --- updated-dependencies: - dependency-name: fyne.io/fyne/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 47b30eaf..0918c94d 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( require ( filippo.io/edwards25519 v1.0.0 - fyne.io/fyne/v2 v2.2.3 + fyne.io/fyne/v2 v2.2.4 github.com/c-robinson/iplib v1.0.3 github.com/cloverstd/tcping v0.1.1 github.com/go-ping/ping v1.1.0 diff --git a/go.sum b/go.sum index 82b50fad..d2bd1834 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,8 @@ cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -fyne.io/fyne/v2 v2.2.3 h1:Umi3vVVW8XnWWPJmMkhIWQOMU/jxB1OqpWVUmjhODD0= -fyne.io/fyne/v2 v2.2.3/go.mod h1:MBoGuHzLLSXdQOWFAwWhIhYTEMp33zqtGCReSWhaQTA= +fyne.io/fyne/v2 v2.2.4 h1:izyiDUjJYAB7B/MST7M9GDs+mQ0CwDgRZTiVJZQoEe4= +fyne.io/fyne/v2 v2.2.4/go.mod h1:MBoGuHzLLSXdQOWFAwWhIhYTEMp33zqtGCReSWhaQTA= fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93 h1:V2IC9t0Zj9Ur6qDbfhUuzVmIvXKFyxZXRJyigUvovs4= fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= From 4f103bf731522c45b5c98364dcdee07c3972d588 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 15:25:35 +0000 Subject: [PATCH 42/48] Bump github.com/urfave/cli/v2 from 2.23.4 to 2.23.5 Bumps [github.com/urfave/cli/v2](https://github.com/urfave/cli) from 2.23.4 to 2.23.5. - [Release notes](https://github.com/urfave/cli/releases) - [Changelog](https://github.com/urfave/cli/blob/main/docs/CHANGELOG.md) - [Commits](https://github.com/urfave/cli/compare/v2.23.4...v2.23.5) --- updated-dependencies: - dependency-name: github.com/urfave/cli/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0918c94d..887bc5e1 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/stretchr/testify v1.8.1 github.com/txn2/txeh v1.3.0 - github.com/urfave/cli/v2 v2.23.4 + github.com/urfave/cli/v2 v2.23.5 golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b // indirect golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 diff --git a/go.sum b/go.sum index d2bd1834..5b5e32de 100644 --- a/go.sum +++ b/go.sum @@ -465,8 +465,8 @@ github.com/txn2/txeh v1.3.0/go.mod h1:O7M6gUTPeMF+vsa4c4Ipx3JDkOYrruB1Wry8QRsMcw github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg= -github.com/urfave/cli/v2 v2.23.4 h1:gcaHwki8kGX6lfp2zz7irxu7eZkcIl1Xapt6XW0Ynqc= -github.com/urfave/cli/v2 v2.23.4/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI= +github.com/urfave/cli/v2 v2.23.5 h1:xbrU7tAYviSpqeR3X4nEFWUdB/uDZ6DE+HxmRU7Xtyw= +github.com/urfave/cli/v2 v2.23.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= From 0dcc54dc493ee0e6204a0eb496eed6ae6f491220 Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Wed, 16 Nov 2022 18:10:09 +0530 Subject: [PATCH 43/48] fix ipv6 addressing bug --- logic/networks.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/logic/networks.go b/logic/networks.go index 35252d1d..c116f7bf 100644 --- a/logic/networks.go +++ b/logic/networks.go @@ -267,14 +267,16 @@ func UniqueAddress6(networkName string, reverse bool) (string, error) { return "666", err } net6 := iplib.Net6FromStr(network.AddressRange6) - newAddrs := net6.FirstAddress() + newAddrs, err := net6.NextIP(net6.FirstAddress()) if reverse { - newAddrs = net6.LastAddress() + newAddrs, err = net6.PreviousIP(net6.LastAddress()) + } + if err != nil { + return "", err } for { - if IsIPUnique(networkName, newAddrs.String(), database.NODES_TABLE_NAME, true) && IsIPUnique(networkName, newAddrs.String(), database.EXT_CLIENT_TABLE_NAME, true) { return newAddrs.String(), nil From d24ed73986793467bc7c22b0fff09467fecc166b Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Wed, 16 Nov 2022 19:11:45 +0530 Subject: [PATCH 44/48] update ipv6 test --- controllers/network_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/network_test.go b/controllers/network_test.go index 03b11759..e7cd2754 100644 --- a/controllers/network_test.go +++ b/controllers/network_test.go @@ -309,7 +309,7 @@ func TestIpv6Network(t *testing.T) { nodeErr := logic.CreateNode(&node1) t.Run("Test node on network IPv6", func(t *testing.T) { assert.Nil(t, nodeErr) - assert.Equal(t, "fde6:be04:fa5e:d076::", node1.Address6) + assert.Equal(t, "fde6:be04:fa5e:d076::1", node1.Address6) }) } From a9d86e19df6bbc20e7ce0371d02fa2bd5e192fe4 Mon Sep 17 00:00:00 2001 From: "kayos@tcp.direct" Date: Sat, 19 Nov 2022 01:52:08 -0800 Subject: [PATCH 45/48] Fix #1750 --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 878f4dda..c276e691 100644 --- a/main.go +++ b/main.go @@ -67,7 +67,7 @@ func initialize() { // Client Mode Prereq Check } if err = database.InitializeDatabase(); err != nil { - logger.FatalLog("Error connecting to database") + logger.FatalLog("Error connecting to database: ", err.Error()) } logger.Log(0, "database successfully connected") if err = logic.AddServerIDIfNotPresent(); err != nil { From f1fc75aa53da330106b7b848a061c9bef78f793f Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Tue, 22 Nov 2022 23:45:31 +0530 Subject: [PATCH 46/48] move user-groups and network-users to enterprise controllers --- controllers/controller.go | 2 -- {controllers => ee/ee_controllers}/networkusers.go | 4 ++-- {controllers => ee/ee_controllers}/usergroups.go | 4 ++-- ee/initialize.go | 7 ++++++- 4 files changed, 10 insertions(+), 7 deletions(-) rename {controllers => ee/ee_controllers}/networkusers.go (99%) rename {controllers => ee/ee_controllers}/usergroups.go (97%) diff --git a/controllers/controller.go b/controllers/controller.go index 1350e37d..de3f3d77 100644 --- a/controllers/controller.go +++ b/controllers/controller.go @@ -27,8 +27,6 @@ var HttpHandlers = []interface{}{ extClientHandlers, ipHandlers, loggerHandlers, - userGroupsHandlers, - networkUsersHandlers, } // HandleRESTRequests - handles the rest requests diff --git a/controllers/networkusers.go b/ee/ee_controllers/networkusers.go similarity index 99% rename from controllers/networkusers.go rename to ee/ee_controllers/networkusers.go index d2307e26..dcf6c8a6 100644 --- a/controllers/networkusers.go +++ b/ee/ee_controllers/networkusers.go @@ -1,4 +1,4 @@ -package controller +package ee_controllers import ( "encoding/json" @@ -14,7 +14,7 @@ import ( "github.com/gravitl/netmaker/models/promodels" ) -func networkUsersHandlers(r *mux.Router) { +func NetworkUsersHandlers(r *mux.Router) { r.HandleFunc("/api/networkusers", logic.SecurityCheck(true, http.HandlerFunc(getAllNetworkUsers))).Methods("GET") r.HandleFunc("/api/networkusers/{network}", logic.SecurityCheck(true, http.HandlerFunc(getNetworkUsers))).Methods("GET") r.HandleFunc("/api/networkusers/{network}/{networkuser}", logic.SecurityCheck(true, http.HandlerFunc(getNetworkUser))).Methods("GET") diff --git a/controllers/usergroups.go b/ee/ee_controllers/usergroups.go similarity index 97% rename from controllers/usergroups.go rename to ee/ee_controllers/usergroups.go index 4ade6f29..5c99f001 100644 --- a/controllers/usergroups.go +++ b/ee/ee_controllers/usergroups.go @@ -1,4 +1,4 @@ -package controller +package ee_controllers import ( "encoding/json" @@ -13,7 +13,7 @@ import ( "github.com/gravitl/netmaker/models/promodels" ) -func userGroupsHandlers(r *mux.Router) { +func UserGroupsHandlers(r *mux.Router) { r.HandleFunc("/api/usergroups", logic.SecurityCheck(true, http.HandlerFunc(getUserGroups))).Methods("GET") r.HandleFunc("/api/usergroups/{usergroup}", logic.SecurityCheck(true, http.HandlerFunc(createUserGroup))).Methods("POST") r.HandleFunc("/api/usergroups/{usergroup}", logic.SecurityCheck(true, http.HandlerFunc(deleteUserGroup))).Methods("DELETE") diff --git a/ee/initialize.go b/ee/initialize.go index 558f3715..bc25b3ae 100644 --- a/ee/initialize.go +++ b/ee/initialize.go @@ -17,7 +17,12 @@ import ( func InitEE() { setIsEnterprise() models.SetLogo(retrieveEELogo()) - controller.HttpHandlers = append(controller.HttpHandlers, ee_controllers.MetricHandlers) + controller.HttpHandlers = append( + controller.HttpHandlers, + ee_controllers.MetricHandlers, + ee_controllers.NetworkUsersHandlers, + ee_controllers.UserGroupsHandlers, + ) logic.EnterpriseCheckFuncs = append(logic.EnterpriseCheckFuncs, func() { // == License Handling == ValidateLicense() From f465e3b82dccece568773c838d9ceed8b78faed9 Mon Sep 17 00:00:00 2001 From: shanker JJ Date: Mon, 21 Nov 2022 22:35:15 +0900 Subject: [PATCH 47/48] Support for MIPs arch --- .github/workflows/buildandrelease.yml | 65 ++++++++++++++++++++++++--- netclient/bin-maker.sh | 13 +++--- scripts/netclient-install.sh | 11 ++++- 3 files changed, 75 insertions(+), 14 deletions(-) diff --git a/.github/workflows/buildandrelease.yml b/.github/workflows/buildandrelease.yml index 3251b5a5..7d323d33 100644 --- a/.github/workflows/buildandrelease.yml +++ b/.github/workflows/buildandrelease.yml @@ -294,18 +294,49 @@ jobs: - name: Build run: | cd netclient - env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mipsle/netclient main.go && upx build/netclient-mipsle/netclient + env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mipsle/netclient-mipsle main.go && upx -o build/netclient-mipsle/netclient-mipsle-upx build/netclient-mipsle/netclient-mipsle + env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mipsle/netclient-mipsle-softfloat main.go && upx -o build/netclient-mipsle/netclient-mipsle-softfloat-upx build/netclient-mipsle/netclient-mipsle-softfloat - name: Upload mipsle to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: netclient/build/netclient-mipsle/netclient + file: netclient/build/netclient-mipsle/netclient-mipsle tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-mipsle + - name: Upload mipsle-upx to Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: netclient/build/netclient-mipsle/netclient-mipsle-upx + tag: ${{ env.NETMAKER_VERSION }} + overwrite: true + prerelease: true + asset_name: netclient-mipsle-upx + + - name: Upload mipsle-softfloat to Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: netclient/build/netclient-mipsle/netclient-mipsle-softfloat + tag: ${{ env.NETMAKER_VERSION }} + overwrite: true + prerelease: true + asset_name: netclient-mipsle-softfloat + + - name: Upload mipsle-softfloat-upx to Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: netclient/build/netclient-mipsle/netclient-mipsle-softfloat-upx + tag: ${{ env.NETMAKER_VERSION }} + overwrite: true + prerelease: true + asset_name: netclient-mipsle-softfloat-upx + netclient-mips: runs-on: ubuntu-latest needs: version @@ -325,29 +356,49 @@ jobs: - name: Build run: | cd netclient - env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mips/netclient main.go - env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mips-upx/netclient main.go && upx build/netclient-mips-upx/netclient + env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mips/netclient-mips main.go && upx -o build/netclient-mips/netclient-mips-upx build/netclient-mips/netclient-mips + env CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mips/netclient-mips-softfloat main.go && upx -o build/netclient-mips/netclient-mips-softfloat-upx build/netclient-mips/netclient-mips-softfloat - name: Upload mips to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: netclient/build/netclient-mips/netclient + file: netclient/build/netclient-mips/netclient-mips tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-mips - - name: Upload upx compressed version of mips to Release + - name: Upload mips-upx to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: netclient/build/netclient-mips-upx/netclient + file: netclient/build/netclient-mips/netclient-mips-upx tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-mips-upx + - name: Upload netclient-mips-softfloat to Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: netclient/build/netclient-mips/netclient-mips-softfloat + tag: ${{ env.NETMAKER_VERSION }} + overwrite: true + prerelease: true + asset_name: netclient-mips-softfloat + + - name: Upload netclient-mips-softfloat-upx to Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: netclient/build/netclient-mips/netclient-mips-softfloat-upx + tag: ${{ env.NETMAKER_VERSION }} + overwrite: true + prerelease: true + asset_name: netclient-mips-softfloat-upx + netclient-freebsd: runs-on: ubuntu-latest needs: version diff --git a/netclient/bin-maker.sh b/netclient/bin-maker.sh index 05808fa4..e686d7ba 100755 --- a/netclient/bin-maker.sh +++ b/netclient/bin-maker.sh @@ -19,11 +19,15 @@ function build if [ "$_goarch" == "arm" ] && [ "$_goarm" == "" ]; then build $_goarch $_goose 5 && build $_goarch $_goose 6 && build $_goarch $_goose 7 else - echo $_out - if [ "$_goarch" == "mips" ]; then - # If the binary created through `GOMIPS=softfloat GOARCH=mipsle` is not compatible with your hardware, try changing these variables and creating a binary file compatible with your hardware. - GOARM=$_goarm GOMIPS=softfloat GOARCH=mipsle GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out + + if [[ $_goarch == mips* ]]; then + #At present GOMIPS64 based binaries are not generated through this script, more details about GOMIPS environment variables in https://go.dev/doc/asm#mips . + echo $_out-softfloat + GOARM=$_goarm GOMIPS=softfloat GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out-softfloat + echo $_out + GOARM=$_goarm GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out else + echo $_out GOARM=$_goarm GOARCH=$_goarch GOOS=$_goose GOHOSTARCH=$__HOST_ARCH CGO_ENABLED=0 go build -ldflags="-X 'main.version=$VERSION'" -o $_out fi fi @@ -36,4 +40,3 @@ for arch in ${__freebsd[*]}; do build "$arch" "freebsd"; done for arch in ${__darwin[*]}; do build "$arch" "darwin"; done for arch in ${__windows[*]}; do build "$arch" "windows"; done - diff --git a/scripts/netclient-install.sh b/scripts/netclient-install.sh index 91992ce0..3df02c7b 100755 --- a/scripts/netclient-install.sh +++ b/scripts/netclient-install.sh @@ -151,8 +151,15 @@ case $(uname | tr A-Z a-z) in mipsle) dist=netclient-mipsle ;; - mips*) - dist=netclient-$CPU_ARCH + mips) + #If binary in the below condition is not compatible with your hardware, retry with other netclient-mips* binaries. + if [[ `printf '\0\1' | hexdump -e '/2 "%04x"'` -eq 0100 ]]; then + #Little Endian, tested and confirmed in GL-MT1300 OS "OpenWrt 19.07.8" + dist=netclient-mipsle-softfloat + else + #Big Endian, tested and confirmed in DSL-2750U OS "OpenWrt 22.03.2" + dist=netclient-mips-softfloat + fi ;; *) fatal "$CPU_ARCH : cpu architecture not supported" From 407c6ed20a427153acb4901db7e61d3016823cc4 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Wed, 2 Nov 2022 10:59:31 -0400 Subject: [PATCH 48/48] fix error from branch create --- logic/peers.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/logic/peers.go b/logic/peers.go index ccc797e2..61eeb38b 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -111,6 +111,8 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) { if peer.LocalListenPort != 0 { peer.ListenPort = peer.LocalListenPort } + } else { + continue } }