initialize.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //go:build ee
  2. // +build ee
  3. package pro
  4. import (
  5. "time"
  6. controller "github.com/gravitl/netmaker/controllers"
  7. "github.com/gravitl/netmaker/logger"
  8. "github.com/gravitl/netmaker/logic"
  9. "github.com/gravitl/netmaker/models"
  10. "github.com/gravitl/netmaker/mq"
  11. "github.com/gravitl/netmaker/pro/auth"
  12. proControllers "github.com/gravitl/netmaker/pro/controllers"
  13. proLogic "github.com/gravitl/netmaker/pro/logic"
  14. "github.com/gravitl/netmaker/servercfg"
  15. "golang.org/x/exp/slog"
  16. )
  17. // InitPro - Initialize Pro Logic
  18. func InitPro() {
  19. servercfg.IsPro = true
  20. models.SetLogo(retrieveProLogo())
  21. controller.HttpMiddlewares = append(
  22. controller.HttpMiddlewares,
  23. proControllers.OnlyServerAPIWhenUnlicensedMiddleware,
  24. )
  25. controller.HttpHandlers = append(
  26. controller.HttpHandlers,
  27. proControllers.MetricHandlers,
  28. proControllers.RelayHandlers,
  29. proControllers.UserHandlers,
  30. proControllers.FailOverHandlers,
  31. proControllers.InetHandlers,
  32. )
  33. logic.EnterpriseCheckFuncs = append(logic.EnterpriseCheckFuncs, func() {
  34. // == License Handling ==
  35. enableLicenseHook := false
  36. licenseKeyValue := servercfg.GetLicenseKey()
  37. netmakerTenantID := servercfg.GetNetmakerTenantID()
  38. if licenseKeyValue != "" && netmakerTenantID != "" {
  39. enableLicenseHook = true
  40. }
  41. if !enableLicenseHook {
  42. err := initTrial()
  43. if err != nil {
  44. logger.Log(0, "failed to init trial", err.Error())
  45. enableLicenseHook = true
  46. }
  47. trialEndDate, err := getTrialEndDate()
  48. if err != nil {
  49. slog.Error("failed to get trial end date", "error", err)
  50. enableLicenseHook = true
  51. } else {
  52. // check if trial ended
  53. if time.Now().After(trialEndDate) {
  54. // trial ended already
  55. enableLicenseHook = true
  56. }
  57. }
  58. }
  59. if enableLicenseHook {
  60. logger.Log(0, "starting license checker")
  61. ClearLicenseCache()
  62. if err := ValidateLicense(); err != nil {
  63. slog.Error(err.Error())
  64. return
  65. }
  66. logger.Log(0, "proceeding with Paid Tier license")
  67. logic.SetFreeTierForTelemetry(false)
  68. // == End License Handling ==
  69. AddLicenseHooks()
  70. } else {
  71. logger.Log(0, "starting trial license hook")
  72. addTrialLicenseHook()
  73. }
  74. if servercfg.GetServerConfig().RacAutoDisable {
  75. AddRacHooks()
  76. }
  77. var authProvider = auth.InitializeAuthProvider()
  78. if authProvider != "" {
  79. slog.Info("OAuth provider,", authProvider+",", "initialized")
  80. } else {
  81. slog.Error("no OAuth provider found or not configured, continuing without OAuth")
  82. }
  83. proLogic.LoadNodeMetricsToCache()
  84. })
  85. logic.ResetFailOver = proLogic.ResetFailOver
  86. logic.ResetFailedOverPeer = proLogic.ResetFailedOverPeer
  87. logic.FailOverExists = proLogic.FailOverExists
  88. logic.CreateFailOver = proLogic.CreateFailOver
  89. logic.GetFailOverPeerIps = proLogic.GetFailOverPeerIps
  90. logic.DenyClientNodeAccess = proLogic.DenyClientNode
  91. logic.IsClientNodeAllowed = proLogic.IsClientNodeAllowed
  92. logic.AllowClientNodeAccess = proLogic.RemoveDeniedNodeFromClient
  93. logic.SetClientDefaultACLs = proLogic.SetClientDefaultACLs
  94. logic.SetClientACLs = proLogic.SetClientACLs
  95. logic.UpdateProNodeACLs = proLogic.UpdateProNodeACLs
  96. logic.GetMetrics = proLogic.GetMetrics
  97. logic.UpdateMetrics = proLogic.UpdateMetrics
  98. logic.DeleteMetrics = proLogic.DeleteMetrics
  99. logic.GetRelays = proLogic.GetRelays
  100. logic.GetAllowedIpsForRelayed = proLogic.GetAllowedIpsForRelayed
  101. logic.RelayedAllowedIPs = proLogic.RelayedAllowedIPs
  102. logic.UpdateRelayed = proLogic.UpdateRelayed
  103. logic.SetRelayedNodes = proLogic.SetRelayedNodes
  104. logic.RelayUpdates = proLogic.RelayUpdates
  105. logic.ValidateRelay = proLogic.ValidateRelay
  106. logic.GetTrialEndDate = getTrialEndDate
  107. logic.SetDefaultGw = proLogic.SetDefaultGw
  108. logic.SetDefaultGwForRelayedUpdate = proLogic.SetDefaultGwForRelayedUpdate
  109. logic.UnsetInternetGw = proLogic.UnsetInternetGw
  110. logic.SetInternetGw = proLogic.SetInternetGw
  111. logic.GetAllowedIpForInetNodeClient = proLogic.GetAllowedIpForInetNodeClient
  112. mq.UpdateMetrics = proLogic.MQUpdateMetrics
  113. mq.UpdateMetricsFallBack = proLogic.MQUpdateMetricsFallBack
  114. }
  115. func retrieveProLogo() string {
  116. return `
  117. __ __ ______ ______ __ __ ______ __ __ ______ ______
  118. /\ "-.\ \ /\ ___\ /\__ _\ /\ "-./ \ /\ __ \ /\ \/ / /\ ___\ /\ == \
  119. \ \ \-. \ \ \ __\ \/_/\ \/ \ \ \-./\ \ \ \ __ \ \ \ _"-. \ \ __\ \ \ __<
  120. \ \_\\"\_\ \ \_____\ \ \_\ \ \_\ \ \_\ \ \_\ \_\ \ \_\ \_\ \ \_____\ \ \_\ \_\
  121. \/_/ \/_/ \/_____/ \/_/ \/_/ \/_/ \/_/\/_/ \/_/\/_/ \/_____/ \/_/ /_/
  122. ___ ___ ____
  123. ____ ____ ____ / _ \ / _ \ / __ \ ____ ____ ____
  124. /___/ /___/ /___/ / ___/ / , _// /_/ / /___/ /___/ /___/
  125. /___/ /___/ /___/ /_/ /_/|_| \____/ /___/ /___/ /___/
  126. `
  127. }