From fb5f08be5a2af696464a094a55be20edea81f60b Mon Sep 17 00:00:00 2001 From: worker-9 Date: Wed, 28 Jul 2021 16:08:50 -0400 Subject: [PATCH] Fixed client and server issues with updates and dns before db connect --- controllers/nodeHttpController.go | 11 ++++------ main.go | 4 ++-- models/node.go | 5 +++-- netclient/wireguard/kernel.go | 36 +++++++++++-------------------- 4 files changed, 22 insertions(+), 34 deletions(-) diff --git a/controllers/nodeHttpController.go b/controllers/nodeHttpController.go index 6d934b72..91a469ab 100644 --- a/controllers/nodeHttpController.go +++ b/controllers/nodeHttpController.go @@ -198,7 +198,7 @@ func authorize(networkCheck bool, authNetwork string, next http.Handler) http.Ha isAuthorized = true r.Header.Set("ismasterkey", "yes") } else { - r.Header.Set("ismasterkey", "") + r.Header.Set("ismasterkey", "") mac, _, err := functions.VerifyToken(authToken) if err != nil { errorResponse = models.ErrorResponse{ @@ -320,7 +320,7 @@ func getAllNodes(w http.ResponseWriter, r *http.Request) { return } var nodes []models.Node - if user.IsAdmin || r.Header.Get("ismasterkey") == "yes" { + if user.IsAdmin || r.Header.Get("ismasterkey") == "yes" { nodes, err = models.GetAllNodes() if err != nil { returnErrorResponse(w, r, formatError(err, "internal")) @@ -706,8 +706,8 @@ func CreateIngressGateway(netid string, macaddress string) (models.Node, error) } } node.SetLastModified() - node.PostUp = postUpCmd - node.PostDown = postDownCmd + node.PostUp = postUpCmd + node.PostDown = postDownCmd key, err := functions.GetRecordKey(node.MacAddress, node.Network) if err != nil { return models.Node{}, err @@ -788,9 +788,6 @@ func updateNode(w http.ResponseWriter, r *http.Request) { return } - if err = SetNetworkNodesLastModified(node.Network); err != nil { - log.Println(err) - } if servercfg.IsDNSMode() { err = SetDNS() } diff --git a/main.go b/main.go index 5a3d573b..0d70239f 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,6 @@ import ( //Start MongoDB Connection and start API Request Handler func main() { - checkModes() // check which flags are set and if root or not initialize() // initial db and grpc server defer database.Database.Close() startControllers() // start the grpc or rest endpoints @@ -46,6 +45,7 @@ func checkModes() { // Client Mode Prereq Check if uid != 0 { log.Fatal("To run in client mode requires root privileges. Either disable client mode or run with sudo.") } + database.InitializeDatabase() if servercfg.IsDNSMode() { err := functions.SetDNSDir() @@ -57,7 +57,7 @@ func checkModes() { // Client Mode Prereq Check } func initialize() { - database.InitializeDatabase() + checkModes() // check which flags are set and if root or not if servercfg.IsGRPCWireGuard() { if err := serverctl.InitServerWireGuard(); err != nil { log.Fatal(err) diff --git a/models/node.go b/models/node.go index f638356e..056ca4a5 100644 --- a/models/node.go +++ b/models/node.go @@ -15,6 +15,7 @@ import ( const charset = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" const TEN_YEARS_IN_SECONDS = 300000000 + var seededRand *rand.Rand = rand.New( rand.NewSource(time.Now().UnixNano())) @@ -264,16 +265,16 @@ func (newNode *Node) Fill(currentNode *Node) { } func (currentNode *Node) Update(newNode *Node) error { - newNode.Fill(currentNode) + newNode.Fill(currentNode) if err := newNode.Validate(true); err != nil { return err } newNode.SetID() if newNode.ID == currentNode.ID { + newNode.SetLastModified() if data, err := json.Marshal(newNode); err != nil { return err } else { - newNode.SetLastModified() if err = database.Insert(newNode.ID, string(data), database.NODES_TABLE_NAME); err == nil { if network, err := GetNetwork(newNode.Network); err == nil { err = network.SetNetworkNodesLastModified() diff --git a/netclient/wireguard/kernel.go b/netclient/wireguard/kernel.go index 650f0b13..6f8aa8a4 100644 --- a/netclient/wireguard/kernel.go +++ b/netclient/wireguard/kernel.go @@ -1,7 +1,6 @@ package wireguard import ( - "github.com/davecgh/go-spew/spew" "context" "crypto/tls" "errors" @@ -14,6 +13,8 @@ import ( "strconv" "strings" + "github.com/davecgh/go-spew/spew" + nodepb "github.com/gravitl/netmaker/grpc" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/netclient/auth" @@ -203,30 +204,19 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig Stdout: os.Stdout, Stderr: os.Stdout, } + cmdIPLinkDelete := exec.Command("ip", "link", "delete", "dev", ifacename) - currentiface, err := net.InterfaceByName(ifacename) - - if err != nil { - err = cmdIPDevLinkAdd.Run() - if err != nil && !strings.Contains(err.Error(), "exists") { - fmt.Println("Error creating interface") - //fmt.Println(err.Error()) - //return err - } + delErr := cmdIPLinkDelete.Run() + addLinkErr := cmdIPDevLinkAdd.Run() + addErr := cmdIPAddrAdd.Run() + if delErr != nil { + log.Println(delErr) } - match := false - addrs, _ := currentiface.Addrs() - for _, a := range addrs { - if strings.Contains(a.String(), node.Address) { - match = true - } + if addLinkErr != nil { + log.Println(addLinkErr) } - if !match { - err = cmdIPAddrAdd.Run() - if err != nil { - fmt.Println("Error adding address") - //return err - } + if addErr != nil { + log.Println(addErr) } var nodeport int nodeport = int(node.Listenport) @@ -267,7 +257,7 @@ func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig } } //=========DNS Setup==========\\ - log.Println("NODECFG.DNS:",nodecfg.DNS) + log.Println("NODECFG.DNS:", nodecfg.DNS) if nodecfg.DNS == "on" { _ = local.UpdateDNS(ifacename, network, nameserver) }