Explorar o código

use uuid for node.ID

Matthew R Kasun %!s(int64=3) %!d(string=hai) anos
pai
achega
9075e60b41
Modificáronse 7 ficheiros con 49 adicións e 22 borrados
  1. 4 0
      database/database.go
  2. 9 9
      functions/helpers.go
  3. 1 0
      go.mod
  4. 1 0
      go.sum
  5. 18 3
      logic/nodes.go
  6. 8 2
      logic/util.go
  7. 8 8
      models/node.go

+ 4 - 0
database/database.go

@@ -42,6 +42,9 @@ const DATABASE_FILENAME = "netmaker.db"
 // GENERATED_TABLE_NAME - stores server generated k/v
 const GENERATED_TABLE_NAME = "generated"
 
+// UUID_MAP_TABLE_NAME - stores mapping between uuid and macaddress/network
+const UUID_MAP_TABLE_NAME = "uuid"
+
 // == ERROR CONSTS ==
 
 // NO_RECORD - no singular result found
@@ -119,6 +122,7 @@ func createTables() {
 	createTable(PEERS_TABLE_NAME)
 	createTable(SERVERCONF_TABLE_NAME)
 	createTable(GENERATED_TABLE_NAME)
+	createTable(UUID_MAP_TABLE_NAME)
 }
 
 func createTable(tableName string) error {

+ 9 - 9
functions/helpers.go

@@ -141,16 +141,16 @@ func IsNetworkDisplayNameUnique(name string) (bool, error) {
 	return isunique, nil
 }
 
+// DEPRECATED -- not called by anything
 // IsMacAddressUnique - checks if mac is unique
-func IsMacAddressUnique(macaddress string, networkName string) (bool, error) {
-
-	_, err := database.FetchRecord(database.NODES_TABLE_NAME, macaddress+"###"+networkName)
-	if err != nil {
-		return database.IsEmptyRecord(err), err
-	}
-
-	return true, nil
-}
+//
+//	_, err := database.FetchRecord(database.NODES_TABLE_NAME, macaddress+"###"+networkName)
+//	if err != nil {
+//		return database.IsEmptyRecord(err), err
+//	}
+//
+//	return true, nil
+//}
 
 // IsKeyValidGlobal - checks if a key is valid globally
 func IsKeyValidGlobal(keyvalue string) bool {

+ 1 - 0
go.mod

@@ -6,6 +6,7 @@ require (
 	github.com/go-playground/validator/v10 v10.10.0
 	github.com/golang-jwt/jwt/v4 v4.2.0
 	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/google/uuid v1.1.2
 	github.com/gorilla/handlers v1.5.1
 	github.com/gorilla/mux v1.8.0
 	github.com/lib/pq v1.10.4

+ 1 - 0
go.sum

@@ -69,6 +69,7 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 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 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
 github.com/google/uuid v1.1.2/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=

+ 18 - 3
logic/nodes.go

@@ -297,14 +297,25 @@ func SetNodeDefaults(node *models.Node) {
 	node.KeyUpdateTimeStamp = time.Now().Unix()
 }
 
-// GetRecordKey - get record key
-func GetRecordKey(id string, network string) (string, error) {
+// GETRecordKey - gets mac/network key string
+func GetRecordKey(id, network string) (string, error) {
 	if id == "" || network == "" {
 		return "", errors.New("unable to get record key")
 	}
 	return id + "###" + network, nil
 }
 
+// GetUUID - get UUID matching mac/network
+func GetUUID(macnet string) (string, error) {
+	record, err := database.FetchRecord(database.UUID_MAP_TABLE_NAME, macnet)
+	if err != nil {
+		return "", err
+	}
+	var uuid string
+	err = json.Unmarshal([]byte(record), &uuid)
+	return uuid, err
+}
+
 // GetNodeByMacAddress - gets a node by mac address
 func GetNodeByMacAddress(network string, macaddress string) (models.Node, error) {
 
@@ -314,8 +325,12 @@ func GetNodeByMacAddress(network string, macaddress string) (models.Node, error)
 	if err != nil {
 		return node, err
 	}
+	uuid, err := GetUUID(key)
+	if err != nil {
+		return node, err
+	}
 
-	record, err := database.FetchRecord(database.NODES_TABLE_NAME, key)
+	record, err := database.FetchRecord(database.NODES_TABLE_NAME, uuid)
 	if err != nil {
 		return models.Node{}, err
 	}

+ 8 - 2
logic/util.go

@@ -118,14 +118,20 @@ func CreateNode(node *models.Node) error {
 	if err != nil {
 		return err
 	}
-	nodebytes, err := json.Marshal(&node)
+	uuid, err := GetUUID(key)
 	if err != nil {
 		return err
 	}
-	err = database.Insert(key, string(nodebytes), database.NODES_TABLE_NAME)
+	nodebytes, err := json.Marshal(&node)
 	if err != nil {
 		return err
 	}
+	if err = database.Insert(key, uuid, database.UUID_MAP_TABLE_NAME); err != nil {
+		return err
+	}
+	if err = database.Insert(uuid, string(nodebytes), database.NODES_TABLE_NAME); err != nil {
+		return err
+	}
 	if node.IsPending != "yes" {
 		DecrimentKey(node.Network, node.AccessKey)
 	}

+ 8 - 8
models/node.go

@@ -2,12 +2,12 @@ package models
 
 import (
 	"bytes"
-	"errors"
 	"math/rand"
 	"net"
 	"strings"
 	"time"
 
+	"github.com/google/uuid"
 	"golang.org/x/crypto/bcrypt"
 )
 
@@ -192,7 +192,7 @@ func (node *Node) SetLastPeerUpdate() {
 }
 
 func (node *Node) SetID() {
-	node.ID = node.MacAddress + "###" + node.Network
+	node.ID = uuid.New().String()
 }
 
 func (node *Node) SetExpirationDateTime() {
@@ -380,9 +380,9 @@ 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
-}
+//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
+//}