mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-20 07:16:06 +08:00
random string
update algorithm consolidate MakeRandomString, RandomString & GenerateCrytoString into one function
This commit is contained in:
parent
ba396f1b5b
commit
6d6ba3aa7d
|
@ -9,7 +9,6 @@ import (
|
|||
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
)
|
||||
|
||||
// EnrollmentErrors - struct for holding EnrollmentKey error messages
|
||||
|
@ -190,9 +189,9 @@ func getUniqueEnrollmentID() (string, error) {
|
|||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
newID := ncutils.MakeRandomString(models.EnrollmentKeyLength)
|
||||
newID := RandomString(models.EnrollmentKeyLength)
|
||||
for _, ok := currentKeys[newID]; ok; {
|
||||
newID = ncutils.MakeRandomString(models.EnrollmentKeyLength)
|
||||
newID = RandomString(models.EnrollmentKeyLength)
|
||||
}
|
||||
return newID, nil
|
||||
}
|
||||
|
|
|
@ -19,10 +19,7 @@ var jwtSecretKey []byte
|
|||
func SetJWTSecret() {
|
||||
currentSecret, jwtErr := FetchJWTSecret()
|
||||
if jwtErr != nil {
|
||||
newValue, err := GenerateCryptoString(64)
|
||||
if err != nil {
|
||||
logger.FatalLog("something went wrong when generating JWT signature")
|
||||
}
|
||||
newValue := RandomString(64)
|
||||
jwtSecretKey = []byte(newValue) // 512 bit random password
|
||||
if err := StoreJWTSecret(string(jwtSecretKey)); err != nil {
|
||||
logger.FatalLog("something went wrong when configuring JWT authentication")
|
||||
|
|
|
@ -2,11 +2,10 @@
|
|||
package logic
|
||||
|
||||
import (
|
||||
crand "crypto/rand"
|
||||
"crypto/rand"
|
||||
"encoding/base32"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"math/big"
|
||||
"math/rand"
|
||||
"net"
|
||||
"os"
|
||||
"strings"
|
||||
|
@ -14,6 +13,7 @@ import (
|
|||
|
||||
"github.com/c-robinson/iplib"
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/logger"
|
||||
)
|
||||
|
||||
// IsBase64 - checks if a string is in base64 format
|
||||
|
@ -68,32 +68,15 @@ func SetNetworkNodesLastModified(networkName string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// GenerateCryptoString - generates random string of n length
|
||||
func GenerateCryptoString(n int) (string, error) {
|
||||
const chars = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-"
|
||||
ret := make([]byte, n)
|
||||
for i := range ret {
|
||||
num, err := crand.Int(crand.Reader, big.NewInt(int64(len(chars))))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
ret[i] = chars[num.Int64()]
|
||||
}
|
||||
|
||||
return string(ret), nil
|
||||
}
|
||||
|
||||
// RandomString - returns a random string in a charset
|
||||
func RandomString(length int) string {
|
||||
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||
|
||||
var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
|
||||
b := make([]byte, length)
|
||||
for i := range b {
|
||||
b[i] = charset[seededRand.Intn(len(charset))]
|
||||
randombytes := make([]byte, length)
|
||||
_, err := rand.Read(randombytes)
|
||||
if err != nil {
|
||||
logger.Log(0, "random string", err.Error())
|
||||
return ""
|
||||
}
|
||||
return string(b)
|
||||
return base32.StdEncoding.EncodeToString(randombytes)[:length]
|
||||
}
|
||||
|
||||
// StringSliceContains - sees if a string slice contains a string element
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package ncutils
|
||||
package logic
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
@ -7,10 +7,10 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestMakeRandomString(t *testing.T) {
|
||||
func TestRandomString(t *testing.T) {
|
||||
for testCase := 0; testCase < 100; testCase++ {
|
||||
for size := 2; size < 2058; size++ {
|
||||
if length := len(MakeRandomString(size)); length != size {
|
||||
if length := len(RandomString(size)); length != size {
|
||||
t.Fatalf("expected random string of size %d, got %d instead", size, length)
|
||||
}
|
||||
}
|
||||
|
@ -18,9 +18,9 @@ func TestMakeRandomString(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestMakeRandomStringValid(t *testing.T) {
|
||||
lengthStr := MakeRandomString(10)
|
||||
lengthStr := RandomString(10)
|
||||
assert.Equal(t, len(lengthStr), 10)
|
||||
validMqID := MakeRandomString(23)
|
||||
validMqID := RandomString(23)
|
||||
assert.False(t, strings.Contains(validMqID, "#"))
|
||||
assert.False(t, strings.Contains(validMqID, "!"))
|
||||
assert.False(t, strings.Contains(validMqID, "\""))
|
4
mq/mq.go
4
mq/mq.go
|
@ -8,7 +8,7 @@ import (
|
|||
|
||||
mqtt "github.com/eclipse/paho.mqtt.golang"
|
||||
"github.com/gravitl/netmaker/logger"
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
"github.com/gravitl/netmaker/logic"
|
||||
"github.com/gravitl/netmaker/servercfg"
|
||||
)
|
||||
|
||||
|
@ -27,7 +27,7 @@ var mqclient mqtt.Client
|
|||
func setMqOptions(user, password string, opts *mqtt.ClientOptions) {
|
||||
broker, _ := servercfg.GetMessageQueueEndpoint()
|
||||
opts.AddBroker(broker)
|
||||
id := ncutils.MakeRandomString(23)
|
||||
id := logic.RandomString(23)
|
||||
opts.ClientID = id
|
||||
opts.SetUsername(user)
|
||||
opts.SetPassword(password)
|
||||
|
|
|
@ -2,7 +2,6 @@ package ncutils
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/gob"
|
||||
)
|
||||
|
||||
|
@ -32,16 +31,3 @@ func ConvertBytesToKey(data []byte) (*[32]byte, error) {
|
|||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
// MakeRandomString - generates a random string of len n
|
||||
func MakeRandomString(n int) string {
|
||||
const validChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
result := make([]byte, n)
|
||||
if _, err := rand.Reader.Read(result); err != nil {
|
||||
return ""
|
||||
}
|
||||
for i, b := range result {
|
||||
result[i] = validChars[b%byte(len(validChars))]
|
||||
}
|
||||
return string(result)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue