license.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package pro
  2. import (
  3. "crypto/rand"
  4. "encoding/json"
  5. "github.com/gravitl/netmaker/database"
  6. "github.com/gravitl/netmaker/netclient/ncutils"
  7. "golang.org/x/crypto/nacl/box"
  8. )
  9. const (
  10. db_license_key = "netmaker-id-key-pair"
  11. )
  12. type apiServerConf struct {
  13. PrivateKey []byte `json:"private_key" binding:"required"`
  14. PublicKey []byte `json:"public_key" binding:"required"`
  15. }
  16. // FetchApiServerKeys - fetches netmaker license keys for identification
  17. // as well as secure communication with API
  18. // if none present, it generates a new pair
  19. func FetchApiServerKeys() (pub *[32]byte, priv *[32]byte, err error) {
  20. var returnData = apiServerConf{}
  21. currentData, err := database.FetchRecord(database.SERVERCONF_TABLE_NAME, db_license_key)
  22. if err != nil && !database.IsEmptyRecord(err) {
  23. return nil, nil, err
  24. } else if database.IsEmptyRecord(err) { // need to generate a new identifier pair
  25. pub, priv, err = box.GenerateKey(rand.Reader)
  26. if err != nil {
  27. return nil, nil, err
  28. }
  29. pubBytes, err := ncutils.ConvertKeyToBytes(pub)
  30. if err != nil {
  31. return nil, nil, err
  32. }
  33. privBytes, err := ncutils.ConvertKeyToBytes(priv)
  34. if err != nil {
  35. return nil, nil, err
  36. }
  37. returnData.PrivateKey = privBytes
  38. returnData.PublicKey = pubBytes
  39. record, err := json.Marshal(&returnData)
  40. if err != nil {
  41. return nil, nil, err
  42. }
  43. if err = database.Insert(db_license_key, string(record), database.SERVERCONF_TABLE_NAME); err != nil {
  44. return nil, nil, err
  45. }
  46. } else {
  47. if err = json.Unmarshal([]byte(currentData), &returnData); err != nil {
  48. return nil, nil, err
  49. }
  50. priv, err = ncutils.ConvertBytesToKey(returnData.PrivateKey)
  51. if err != nil {
  52. return nil, nil, err
  53. }
  54. pub, err = ncutils.ConvertBytesToKey(returnData.PublicKey)
  55. if err != nil {
  56. return nil, nil, err
  57. }
  58. }
  59. return pub, priv, nil
  60. }