Skip to content

Commit

Permalink
hotfix v0.8.5
Browse files Browse the repository at this point in the history
  • Loading branch information
0xdcarns committed Feb 16, 2022
1 parent 79671cc commit 1bec97c
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 1 deletion.
20 changes: 19 additions & 1 deletion logic/jwts.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,32 @@ package logic

import (
"errors"
"log"
"time"

"github.com/golang-jwt/jwt/v4"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg"
)

var jwtSecretKey = []byte("(BytesOverTheWire)")
var jwtSecretKey []byte

// SetJWTSecret - sets the jwt secret on server startup
func SetJWTSecret() {
currentSecret, jwtErr := FetchJWTSecret()
if jwtErr != nil {
newValue, err := GenerateRandString(64)
if err != nil {
log.Fatalln("something went wrong when generating signature")
}
jwtSecretKey = []byte(newValue) // 512 bit random password
if err := StoreJWTSecret(string(jwtSecretKey)); err != nil {
log.Fatalln("something went wrong when configuring JWT authentication")
}
} else {
jwtSecretKey = []byte(currentSecret)
}
}

// CreateJWT func will used to create the JWT while signing in and signing out
func CreateJWT(macaddress string, network string) (response string, err error) {
Expand Down
29 changes: 29 additions & 0 deletions logic/serverconf.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,32 @@ func FetchPrivKey(serverID string) (string, error) {
func RemovePrivKey(serverID string) error {
return database.DeleteRecord(database.SERVERCONF_TABLE_NAME, serverID)
}

// FetchJWTSecret - fetches jwt secret from db
func FetchJWTSecret() (string, error) {
var dbData string
var err error
var fetchedData = serverData{}
dbData, err = database.FetchRecord(database.SERVERCONF_TABLE_NAME, "nm-jwt-secret")
if err != nil {
return "", err
}
err = json.Unmarshal([]byte(dbData), &fetchedData)
if err != nil {
return "", err
}
return fetchedData.PrivateKey, nil
}

// StoreJWTSecret - stores server jwt secret if needed
func StoreJWTSecret(privateKey string) error {
var newData = serverData{}
var err error
var data []byte
newData.PrivateKey = privateKey
data, err = json.Marshal(&newData)
if err != nil {
return err
}
return database.Insert("nm-jwt-secret", string(data), database.SERVERCONF_TABLE_NAME)
}
17 changes: 17 additions & 0 deletions logic/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
package logic

import (
crand "crypto/rand"
"encoding/base64"
"encoding/json"
"log"
"math/big"
"math/rand"
"strconv"
"strings"
Expand Down Expand Up @@ -288,6 +290,21 @@ func RandomString(length int) string {
return string(b)
}

// GenerateRandString - generates random string of n length
func GenerateRandString(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
}

func setPeerInfo(node models.Node) models.Node {
var peer models.Node
peer.RelayAddrs = node.RelayAddrs
Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ func initialize() { // Client Mode Prereq Check
log.Fatal(err)
}
logic.Log("database successfully connected", 0)
logic.SetJWTSecret()

var authProvider = auth.InitializeAuthProvider()
if authProvider != "" {
Expand Down

0 comments on commit 1bec97c

Please sign in to comment.