types.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package ee
  2. import "fmt"
  3. const (
  4. api_endpoint = "https://api.controller.netmaker.io/api/v1/license/validate"
  5. license_cache_key = "license_response_cache"
  6. license_validation_err_msg = "invalid license"
  7. server_id_key = "nm-server-id"
  8. )
  9. var errValidation = fmt.Errorf(license_validation_err_msg)
  10. // Limits - limits to be referenced throughout server
  11. var Limits = GlobalLimits{
  12. Servers: 0,
  13. Users: 0,
  14. Nodes: 0,
  15. Clients: 0,
  16. FreeTier: false,
  17. }
  18. // GlobalLimits - struct for holding global limits on this netmaker server in memory
  19. type GlobalLimits struct {
  20. Servers int
  21. Users int
  22. Nodes int
  23. Clients int
  24. FreeTier bool
  25. Networks int
  26. }
  27. // LicenseKey - the license key struct representation with associated data
  28. type LicenseKey struct {
  29. LicenseValue string `json:"license_value"` // actual (public) key and the unique value for the key
  30. Expiration int64 `json:"expiration"`
  31. LimitServers int `json:"limit_servers"`
  32. LimitUsers int `json:"limit_users"`
  33. LimitNodes int `json:"limit_nodes"`
  34. LimitClients int `json:"limit_clients"`
  35. Metadata string `json:"metadata"`
  36. SubscriptionID string `json:"subscription_id"` // for a paid subscription (non-free-tier license)
  37. FreeTier string `json:"free_tier"` // yes if free tier
  38. IsActive string `json:"is_active"` // yes if active
  39. }
  40. // ValidatedLicense - the validated license struct
  41. type ValidatedLicense struct {
  42. LicenseValue string `json:"license_value" binding:"required"` // license that validation is being requested for
  43. EncryptedLicense string `json:"encrypted_license" binding:"required"` // to be decrypted by Netmaker using Netmaker server's private key
  44. }
  45. // LicenseSecret - the encrypted struct for sending user-id
  46. type LicenseSecret struct {
  47. UserID string `json:"user_id" binding:"required"` // UUID for user foreign key to User table
  48. Limits LicenseLimits `json:"limits" binding:"required"`
  49. }
  50. // LicenseLimits - struct license limits
  51. type LicenseLimits struct {
  52. Servers int `json:"servers" binding:"required"`
  53. Users int `json:"users" binding:"required"`
  54. Nodes int `json:"nodes" binding:"required"`
  55. Clients int `json:"clients" binding:"required"`
  56. }
  57. // LicenseLimits.SetDefaults - sets the default values for limits
  58. func (l *LicenseLimits) SetDefaults() {
  59. l.Clients = 0
  60. l.Servers = 1
  61. l.Nodes = 0
  62. l.Users = 1
  63. }
  64. // ValidateLicenseRequest - used for request to validate license endpoint
  65. type ValidateLicenseRequest struct {
  66. NmServerPubKey string `json:"nm_server_pub_key" binding:"required"` // Netmaker server public key used to send data back to Netmaker for the Netmaker server to decrypt (eg output from validating license)
  67. EncryptedPart string `json:"secret" binding:"required"`
  68. }
  69. type licenseResponseCache struct {
  70. Body []byte `json:"body" binding:"required"`
  71. }
  72. type serverIDs struct {
  73. ServerIDs []string `json:"server_ids" binding:"required"`
  74. }