|
@@ -2,6 +2,7 @@ package logic
|
|
|
|
|
|
import (
|
|
import (
|
|
"encoding/json"
|
|
"encoding/json"
|
|
|
|
+ "errors"
|
|
"fmt"
|
|
"fmt"
|
|
"net"
|
|
"net"
|
|
"reflect"
|
|
"reflect"
|
|
@@ -9,6 +10,7 @@ import (
|
|
"sync"
|
|
"sync"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
|
+ "github.com/goombaio/namegenerator"
|
|
"github.com/gravitl/netmaker/database"
|
|
"github.com/gravitl/netmaker/database"
|
|
"github.com/gravitl/netmaker/logger"
|
|
"github.com/gravitl/netmaker/logger"
|
|
"github.com/gravitl/netmaker/logic/acls"
|
|
"github.com/gravitl/netmaker/logic/acls"
|
|
@@ -281,13 +283,41 @@ func CreateExtClient(extclient *models.ExtClient) error {
|
|
}
|
|
}
|
|
|
|
|
|
if extclient.ClientID == "" {
|
|
if extclient.ClientID == "" {
|
|
- extclient.ClientID = models.GenerateNodeName()
|
|
|
|
|
|
+ extclient.ClientID, err = GenerateNodeName(extclient.Network)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
extclient.LastModified = time.Now().Unix()
|
|
extclient.LastModified = time.Now().Unix()
|
|
return SaveExtClient(extclient)
|
|
return SaveExtClient(extclient)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// GenerateNodeName - generates a random node name
|
|
|
|
+func GenerateNodeName(network string) (string, error) {
|
|
|
|
+ seed := time.Now().UTC().UnixNano()
|
|
|
|
+ nameGenerator := namegenerator.NewNameGenerator(seed)
|
|
|
|
+ var name string
|
|
|
|
+ cnt := 0
|
|
|
|
+ for {
|
|
|
|
+ if cnt > 10 {
|
|
|
|
+ return "", errors.New("couldn't generate random name, try again")
|
|
|
|
+ }
|
|
|
|
+ cnt += 1
|
|
|
|
+ name = nameGenerator.Generate()
|
|
|
|
+ if len(name) > 15 {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ _, err := GetExtClient(name, network)
|
|
|
|
+ if err == nil {
|
|
|
|
+ // config exists with same name
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ return name, nil
|
|
|
|
+}
|
|
|
|
+
|
|
// SaveExtClient - saves an ext client to database
|
|
// SaveExtClient - saves an ext client to database
|
|
func SaveExtClient(extclient *models.ExtClient) error {
|
|
func SaveExtClient(extclient *models.ExtClient) error {
|
|
key, err := GetRecordKey(extclient.ClientID, extclient.Network)
|
|
key, err := GetRecordKey(extclient.ClientID, extclient.Network)
|
|
@@ -802,6 +832,7 @@ func GetStaticNodesByNetwork(network models.NetworkID, onlyWg bool) (staticNode
|
|
if err != nil {
|
|
if err != nil {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ SortExtClient(extClients[:])
|
|
for _, extI := range extClients {
|
|
for _, extI := range extClients {
|
|
if extI.Network == network.String() {
|
|
if extI.Network == network.String() {
|
|
if onlyWg && extI.RemoteAccessClientID != "" {
|
|
if onlyWg && extI.RemoteAccessClientID != "" {
|