Browse Source

add uuid to network

abhishek9686 10 months ago
parent
commit
cae2c7292f
3 changed files with 61 additions and 25 deletions
  1. 25 9
      logic/networks.go
  2. 14 0
      migrate/migrate.go
  3. 22 16
      models/network.go

+ 25 - 9
logic/networks.go

@@ -122,22 +122,22 @@ func getNetworksFromCache() (networks []models.Network) {
 	return
 }
 
-func deleteNetworkFromCache(key string) {
+func deleteNetworkFromCache(key uuid.UUID) {
 	networkCacheMutex.Lock()
-	delete(networkCacheMap, key)
+	delete(networkCacheMap, key.String())
 	networkCacheMutex.Unlock()
 }
 
-func getNetworkFromCache(key string) (network models.Network, ok bool) {
+func getNetworkFromCache(key uuid.UUID) (network models.Network, ok bool) {
 	networkCacheMutex.RLock()
-	network, ok = networkCacheMap[key]
+	network, ok = networkCacheMap[key.String()]
 	networkCacheMutex.RUnlock()
 	return
 }
 
-func storeNetworkInCache(key string, network models.Network) {
+func storeNetworkInCache(key uuid.UUID, network models.Network) {
 	networkCacheMutex.Lock()
-	networkCacheMap[key] = network
+	networkCacheMap[key.String()] = network
 	networkCacheMutex.Unlock()
 }
 
@@ -163,7 +163,7 @@ func GetNetworks() ([]models.Network, error) {
 		// add network our array
 		networks = append(networks, network)
 		if servercfg.CacheEnabled() {
-			storeNetworkInCache(network.NetID, network)
+			storeNetworkInCache(network.ID, network)
 		}
 	}
 
@@ -205,7 +205,7 @@ func DeleteNetwork(network string) error {
 
 // CreateNetwork - creates a network in database
 func CreateNetwork(network models.Network) (models.Network, error) {
-
+	network.ID = uuid.New()
 	if network.AddressRange != "" {
 		normalizedRange, err := NormalizeCIDR(network.AddressRange)
 		if err != nil {
@@ -487,11 +487,12 @@ func UpdateNetwork(currentNetwork *models.Network, newNetwork *models.Network) (
 		hasrangeupdate4 := newNetwork.AddressRange != currentNetwork.AddressRange
 		hasrangeupdate6 := newNetwork.AddressRange6 != currentNetwork.AddressRange6
 		hasholepunchupdate := newNetwork.DefaultUDPHolePunch != currentNetwork.DefaultUDPHolePunch
+		newNetwork.SetNetworkLastModified()
 		data, err := json.Marshal(newNetwork)
 		if err != nil {
 			return false, false, false, err
 		}
-		newNetwork.SetNetworkLastModified()
+
 		err = database.Insert(newNetwork.NetID, string(data), database.NETWORKS_TABLE_NAME)
 		if err == nil {
 			if servercfg.CacheEnabled() {
@@ -504,6 +505,21 @@ func UpdateNetwork(currentNetwork *models.Network, newNetwork *models.Network) (
 	return false, false, false, errors.New("failed to update network " + newNetwork.NetID + ", cannot change netid.")
 }
 
+func UpsertNetwork(net *models.Network) error {
+	net.SetNetworkLastModified()
+	data, err := json.Marshal(net)
+	if err != nil {
+		return err
+	}
+
+	err = database.Insert(net.NetID, string(data), database.NETWORKS_TABLE_NAME)
+	if err == nil {
+		if servercfg.CacheEnabled() {
+			storeNetworkInCache(net.ID.String(), *net)
+		}
+	}
+}
+
 // GetNetwork - gets a network from database
 func GetNetwork(networkname string) (models.Network, error) {
 

+ 14 - 0
migrate/migrate.go

@@ -155,6 +155,20 @@ func updateEnrollmentKeys() {
 	}
 }
 
+func updateNetworks() {
+	nets, err := logic.GetNetworks()
+	if err != nil {
+		return
+	}
+	for _, netI := range nets {
+		netI := netI
+		if netI.ID == uuid.Nil {
+			netI.ID = uuid.New()
+			logic.UpsertNetwork(&netI)
+		}
+	}
+}
+
 func removeOldUserGrps() {
 	rows, err := database.FetchRecords(database.USER_GROUPS_TABLE_NAME)
 	if err != nil {

+ 22 - 16
models/network.go

@@ -3,27 +3,32 @@ package models
 import (
 	"net"
 	"time"
+
+	"github.com/google/uuid"
 )
 
 // Network Struct - contains info for a given unique network
 // At  some point, need to replace all instances of Name with something else like  Identifier
 type Network struct {
-	AddressRange        string `json:"addressrange" bson:"addressrange" validate:"omitempty,cidrv4"`
-	AddressRange6       string `json:"addressrange6" bson:"addressrange6" validate:"omitempty,cidrv6"`
-	NetID               string `json:"netid" bson:"netid" validate:"required,min=1,max=32,netid_valid"`
-	NodesLastModified   int64  `json:"nodeslastmodified" bson:"nodeslastmodified"`
-	NetworkLastModified int64  `json:"networklastmodified" bson:"networklastmodified"`
-	DefaultInterface    string `json:"defaultinterface" bson:"defaultinterface" validate:"min=1,max=35"`
-	DefaultListenPort   int32  `json:"defaultlistenport,omitempty" bson:"defaultlistenport,omitempty" validate:"omitempty,min=1024,max=65535"`
-	NodeLimit           int32  `json:"nodelimit" bson:"nodelimit"`
-	DefaultPostDown     string `json:"defaultpostdown" bson:"defaultpostdown"`
-	DefaultKeepalive    int32  `json:"defaultkeepalive" bson:"defaultkeepalive" validate:"omitempty,max=1000"`
-	AllowManualSignUp   string `json:"allowmanualsignup" bson:"allowmanualsignup" validate:"checkyesorno"`
-	IsIPv4              string `json:"isipv4" bson:"isipv4" validate:"checkyesorno"`
-	IsIPv6              string `json:"isipv6" bson:"isipv6" validate:"checkyesorno"`
-	DefaultUDPHolePunch string `json:"defaultudpholepunch" bson:"defaultudpholepunch" validate:"checkyesorno"`
-	DefaultMTU          int32  `json:"defaultmtu" bson:"defaultmtu"`
-	DefaultACL          string `json:"defaultacl" bson:"defaultacl" yaml:"defaultacl" validate:"checkyesorno"`
+	ID                  uuid.UUID `json:"id"`
+	AddressRange        string    `json:"addressrange" bson:"addressrange" validate:"omitempty,cidrv4"`
+	AddressRange6       string    `json:"addressrange6" bson:"addressrange6" validate:"omitempty,cidrv6"`
+	NetID               string    `json:"netid" bson:"netid" validate:"required,min=1,max=32,netid_valid"`
+	NodesLastModified   int64     `json:"nodeslastmodified" bson:"nodeslastmodified"`
+	NetworkLastModified int64     `json:"networklastmodified" bson:"networklastmodified"`
+	DefaultInterface    string    `json:"defaultinterface" bson:"defaultinterface" validate:"min=1,max=35"`
+	DefaultListenPort   int32     `json:"defaultlistenport,omitempty" bson:"defaultlistenport,omitempty" validate:"omitempty,min=1024,max=65535"`
+	NodeLimit           int32     `json:"nodelimit" bson:"nodelimit"`
+	DefaultPostDown     string    `json:"defaultpostdown" bson:"defaultpostdown"`
+	DefaultKeepalive    int32     `json:"defaultkeepalive" bson:"defaultkeepalive" validate:"omitempty,max=1000"`
+	AllowManualSignUp   string    `json:"allowmanualsignup" bson:"allowmanualsignup" validate:"checkyesorno"`
+	IsIPv4              string    `json:"isipv4" bson:"isipv4" validate:"checkyesorno"`
+	IsIPv6              string    `json:"isipv6" bson:"isipv6" validate:"checkyesorno"`
+	DefaultUDPHolePunch string    `json:"defaultudpholepunch" bson:"defaultudpholepunch" validate:"checkyesorno"`
+	DefaultMTU          int32     `json:"defaultmtu" bson:"defaultmtu"`
+	DefaultACL          string    `json:"defaultacl" bson:"defaultacl" yaml:"defaultacl" validate:"checkyesorno"`
+	CreatedBy           string    `json:"created_by"`
+	CreatedAt           string    `json:"created_at"`
 }
 
 // SaveData - sensitive fields of a network that should be kept the same
@@ -81,6 +86,7 @@ func (network *Network) SetDefaults() {
 	if network.DefaultACL == "" {
 		network.DefaultACL = "yes"
 	}
+	network.CreatedAt = time.Now().UTC().String()
 }
 
 func (network *Network) GetNetworkNetworkCIDR4() *net.IPNet {