From c033be41bb681915fb6e3ef71dbff3e12cf299cb Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Mon, 10 Jan 2022 10:55:05 -0500 Subject: [PATCH] began transition --- go.mod | 1 + go.sum | 2 ++ logic/networks.go | 5 ----- logic/nodes.go | 15 +++++++++++++-- logic/relay.go | 1 - logic/server.go | 2 -- logic/util.go | 11 +++++------ logic/wireguard.go | 2 -- models/node.go | 24 ++++++++++-------------- netclient/config/config.go | 3 --- netclient/functions/common.go | 21 --------------------- 11 files changed, 31 insertions(+), 56 deletions(-) diff --git a/go.mod b/go.mod index 1aecf9c9..70f37dc5 100644 --- a/go.mod +++ b/go.mod @@ -36,6 +36,7 @@ require ( github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect github.com/google/go-cmp v0.5.5 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/josharian/native v0.0.0-20200817173448-b6b71def0850 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/mdlayher/genetlink v1.0.0 // indirect diff --git a/go.sum b/go.sum index b613ac12..1843eb9d 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= diff --git a/logic/networks.go b/logic/networks.go index 2398a85a..d5798d5f 100644 --- a/logic/networks.go +++ b/logic/networks.go @@ -110,7 +110,6 @@ func NetworkNodesUpdatePullChanges(networkName string) error { if err != nil { return err } - node.SetID() database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) } } @@ -355,7 +354,6 @@ func UpdateNetworkLocalAddresses(networkName string) error { fmt.Println("error in node address assignment!") return err } - node.SetID() database.Insert(node.ID, string(newNodeData), database.NODES_TABLE_NAME) } } @@ -387,7 +385,6 @@ func RemoveNetworkNodeIPv6Addresses(networkName string) error { if err != nil { return err } - node.SetID() database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) } } @@ -424,7 +421,6 @@ func UpdateNetworkNodeAddresses(networkName string) error { if err != nil { return err } - node.SetID() database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) } } @@ -630,7 +626,6 @@ func networkNodesUpdateAction(networkName string, action string) error { if err != nil { return err } - node.SetID() database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) } } diff --git a/logic/nodes.go b/logic/nodes.go index c2e804b1..61dea4cd 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -125,7 +125,6 @@ func UpdateNode(currentNode *models.Node, newNode *models.Node) error { if err := ValidateNode(newNode, true); err != nil { return err } - newNode.SetID() if newNode.ID == currentNode.ID { newNode.SetLastModified() if data, err := json.Marshal(newNode); err != nil { @@ -285,7 +284,6 @@ func SetNodeDefaults(node *models.Node) { node.SetRoamingDefault() node.SetPullChangesDefault() node.SetDefaultAction() - node.SetID() node.SetIsServerDefault() node.SetIsStaticDefault() node.SetDefaultEgressGateway() @@ -380,3 +378,16 @@ func GetNodeRelay(network string, relayedNodeAddr string) (models.Node, error) { } return relay, errors.New("could not find relay for node " + relayedNodeAddr) } + +// GetNodeByID - get node by uuid, should have been set by create +func GetNodeByID(uuid string) (models.Node, error) { + var record, err = database.FetchRecord(database.NODES_TABLE_NAME, uuid) + if err != nil { + return models.Node{}, err + } + var node models.Node + if err = json.Unmarshal([]byte(record), &node); err != nil { + return models.Node{}, err + } + return node, nil +} diff --git a/logic/relay.go b/logic/relay.go index 4b3f7ab8..06b8fc67 100644 --- a/logic/relay.go +++ b/logic/relay.go @@ -73,7 +73,6 @@ func SetRelayedNodes(yesOrno string, networkName string, addrs []string) error { if err != nil { return err } - node.SetID() database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) } } diff --git a/logic/server.go b/logic/server.go index 8184f9cc..4319c5b1 100644 --- a/logic/server.go +++ b/logic/server.go @@ -113,7 +113,6 @@ func ServerJoin(networkSettings *models.Network, serverID string) error { node.Endpoint = node.LocalAddress } - node.SetID() if err = StorePrivKey(node.ID, privateKey); err != nil { return err } @@ -215,7 +214,6 @@ func ServerLeave(mac string, network string) error { if err != nil { return err } - serverNode.SetID() return DeleteNode(&serverNode, true) } diff --git a/logic/util.go b/logic/util.go index 989bff4e..7b63fdfe 100644 --- a/logic/util.go +++ b/logic/util.go @@ -9,6 +9,7 @@ import ( "strings" "time" + "github.com/google/uuid" "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/models" @@ -44,7 +45,6 @@ func SetNetworkServerPeers(node *models.Node) { // DeleteNode - deletes a node from database or moves into delete nodes table func DeleteNode(node *models.Node, exterminate bool) error { var err error - node.SetID() var key = node.ID if !exterminate { args := strings.Split(key, "###") @@ -114,15 +114,14 @@ func CreateNode(node *models.Node) error { if err != nil { return err } - key, err := GetRecordKey(node.MacAddress, node.Network) - if err != nil { - return err - } + + node.ID = uuid.NewString() + nodebytes, err := json.Marshal(&node) if err != nil { return err } - err = database.Insert(key, string(nodebytes), database.NODES_TABLE_NAME) + err = database.Insert(node.ID, string(nodebytes), database.NODES_TABLE_NAME) if err != nil { return err } diff --git a/logic/wireguard.go b/logic/wireguard.go index c8b53a54..b796894a 100644 --- a/logic/wireguard.go +++ b/logic/wireguard.go @@ -283,7 +283,6 @@ func setServerPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) e func setWGConfig(node *models.Node, peerupdate bool) error { - node.SetID() peers, hasGateway, gateways, err := GetServerPeers(node) if err != nil { return err @@ -305,7 +304,6 @@ func setWGConfig(node *models.Node, peerupdate bool) error { func setWGKeyConfig(node *models.Node) error { - node.SetID() privatekey, err := wgtypes.GeneratePrivateKey() if err != nil { return err diff --git a/models/node.go b/models/node.go index c6dc623b..4ed0ee63 100644 --- a/models/node.go +++ b/models/node.go @@ -2,7 +2,6 @@ package models import ( "bytes" - "errors" "math/rand" "net" "strings" @@ -75,11 +74,17 @@ type Node struct { MTU int32 `json:"mtu" bson:"mtu" yaml:"mtu"` } +// NodesArray - used for node sorting type NodesArray []Node -func (a NodesArray) Len() int { return len(a) } +// NodesArray.Len - gets length of node array +func (a NodesArray) Len() int { return len(a) } + +// NodesArray.Less - gets returns lower rank of two node addresses func (a NodesArray) Less(i, j int) bool { return isLess(a[i].Address, a[j].Address) } -func (a NodesArray) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + +// NodesArray.Swap - swaps two nodes in array +func (a NodesArray) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func isLess(ipA string, ipB string) bool { ipNetA := net.ParseIP(ipA) @@ -87,12 +92,14 @@ func isLess(ipA string, ipB string) bool { return bytes.Compare(ipNetA, ipNetB) < 0 } +// Node.SetDefaultMTU - sets default MTU of a node func (node *Node) SetDefaultMTU() { if node.MTU == 0 { node.MTU = 1280 } } +// Node.SetDefaulIsPending - sets ispending default func (node *Node) SetDefaulIsPending() { if node.IsPending == "" { node.IsPending = "no" @@ -191,10 +198,6 @@ func (node *Node) SetLastPeerUpdate() { node.LastPeerUpdate = time.Now().Unix() } -func (node *Node) SetID() { - node.ID = node.MacAddress + "###" + node.Network -} - func (node *Node) SetExpirationDateTime() { node.ExpirationDateTime = time.Now().Unix() + TEN_YEARS_IN_SECONDS } @@ -379,10 +382,3 @@ func (node *Node) NameInNodeCharSet() bool { } return true } - -func (node *Node) GetID() (string, error) { - if node.MacAddress == "" || node.Network == "" { - return "", errors.New("unable to get record key") - } - return node.MacAddress + "###" + node.Network, nil -} diff --git a/netclient/config/config.go b/netclient/config/config.go index c343ccb5..b582c27b 100644 --- a/netclient/config/config.go +++ b/netclient/config/config.go @@ -97,9 +97,6 @@ func (config *ClientConfig) ReadConfig() { fmt.Println("no config or invalid") fmt.Println(err) log.Fatal(err) - } else { - config.Node.SetID() - //config = cfg } } } diff --git a/netclient/functions/common.go b/netclient/functions/common.go index 0d77c837..134e1d9c 100644 --- a/netclient/functions/common.go +++ b/netclient/functions/common.go @@ -102,26 +102,6 @@ func getPrivateAddrBackup() (string, error) { return local, err } -// DEPRECATED -// func needInterfaceUpdate(ctx context.Context, mac string, network string, iface string) (bool, string, error) { -// var header metadata.MD -// req := &nodepb.Object{ -// Data: mac + "###" + network, -// Type: nodepb.STRING_TYPE, -// } -// readres, err := wcclient.ReadNode(ctx, req, grpc.Header(&header)) -// if err != nil { -// return false, "", err -// } -// var resNode models.Node -// if err := json.Unmarshal([]byte(readres.Data), &resNode); err != nil { -// return false, iface, err -// } -// oldiface := resNode.Interface - -// return iface != oldiface, oldiface, err -// } - // GetNode - gets node locally func GetNode(network string) models.Node { @@ -184,7 +164,6 @@ func LeaveNetwork(network string) error { if err != nil { log.Printf("Failed to authenticate: %v", err) } else { // handle client side - node.SetID() var header metadata.MD _, err = wcclient.DeleteNode( ctx,