mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-05 20:54:18 +08:00
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package pro
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/json"
|
|
|
|
"github.com/gravitl/netmaker/database"
|
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
|
"golang.org/x/crypto/nacl/box"
|
|
)
|
|
|
|
const (
|
|
db_license_key = "netmaker-id-key-pair"
|
|
)
|
|
|
|
type apiServerConf struct {
|
|
PrivateKey []byte `json:"private_key" binding:"required"`
|
|
PublicKey []byte `json:"public_key" binding:"required"`
|
|
}
|
|
|
|
// FetchApiServerKeys - fetches netmaker license keys for identification
|
|
// as well as secure communication with API
|
|
// if none present, it generates a new pair
|
|
func FetchApiServerKeys() (pub *[32]byte, priv *[32]byte, err error) {
|
|
var returnData = apiServerConf{}
|
|
currentData, err := database.FetchRecord(database.SERVERCONF_TABLE_NAME, db_license_key)
|
|
if err != nil && !database.IsEmptyRecord(err) {
|
|
return nil, nil, err
|
|
} else if database.IsEmptyRecord(err) { // need to generate a new identifier pair
|
|
pub, priv, err = box.GenerateKey(rand.Reader)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
pubBytes, err := ncutils.ConvertKeyToBytes(pub)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
privBytes, err := ncutils.ConvertKeyToBytes(priv)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
returnData.PrivateKey = privBytes
|
|
returnData.PublicKey = pubBytes
|
|
record, err := json.Marshal(&returnData)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
if err = database.Insert(db_license_key, string(record), database.SERVERCONF_TABLE_NAME); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
} else {
|
|
if err = json.Unmarshal([]byte(currentData), &returnData); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
priv, err = ncutils.ConvertBytesToKey(returnData.PrivateKey)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
pub, err = ncutils.ConvertBytesToKey(returnData.PublicKey)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
}
|
|
|
|
return pub, priv, nil
|
|
}
|