diff --git a/logic/jwts.go b/logic/jwts.go index 54bfbb741..7cbd11639 100644 --- a/logic/jwts.go +++ b/logic/jwts.go @@ -17,7 +17,11 @@ var jwtSecretKey []byte func SetJWTSecret() { currentSecret, jwtErr := FetchJWTSecret() if jwtErr != nil { - jwtSecretKey = []byte(RandomString(64)) // 512 bit random password + newValue, err := GenerateCryptoString(64) + if err != nil { + logger.FatalLog("something went wrong when generating JWT signature") + } + jwtSecretKey = []byte(newValue) // 512 bit random password if err := StoreJWTSecret(string(jwtSecretKey)); err != nil { logger.FatalLog("something went wrong when configuring JWT authentication") } diff --git a/logic/util.go b/logic/util.go index 2177a4a5a..ed4766e16 100644 --- a/logic/util.go +++ b/logic/util.go @@ -2,9 +2,11 @@ package logic import ( + crand "crypto/rand" "encoding/base64" "encoding/json" "fmt" + "math/big" "math/rand" "net" "os" @@ -85,29 +87,20 @@ func SetNetworkNodesLastModified(networkName string) error { return nil } -// // GetNode - fetches a node from database -// func GetNode(macaddress string, network string) (models.Node, error) { -// var node models.Node - -// key, err := GetRecordKey(macaddress, network) -// if err != nil { -// return node, err -// } -// data, err := database.FetchRecord(database.NODES_TABLE_NAME, key) -// if err != nil { -// if data == "" { -// data, _ = database.FetchRecord(database.DELETED_NODES_TABLE_NAME, key) -// err = json.Unmarshal([]byte(data), &node) -// } -// return node, err -// } -// if err = json.Unmarshal([]byte(data), &node); err != nil { -// return node, err -// } -// SetNodeDefaults(&node) +// 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 node, err -// } + return string(ret), nil +} // DeleteNodeByID - deletes a node from database or moves into delete nodes table func DeleteNodeByID(node *models.Node, exterminate bool) error {