initialize.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. "github.com/gravitl/netmaker/pro/email"
  14. proLogic "github.com/gravitl/netmaker/pro/logic"
  15. "github.com/gravitl/netmaker/servercfg"
  16. "golang.org/x/exp/slog"
  17. )
  18. // InitPro - Initialize Pro Logic
  19. func InitPro() {
  20. servercfg.IsPro = true
  21. models.SetLogo(retrieveProLogo())
  22. controller.HttpMiddlewares = append(
  23. controller.HttpMiddlewares,
  24. proControllers.OnlyServerAPIWhenUnlicensedMiddleware,
  25. )
  26. controller.HttpHandlers = append(
  27. controller.HttpHandlers,
  28. proControllers.MetricHandlers,
  29. proControllers.UserHandlers,
  30. proControllers.FailOverHandlers,
  31. proControllers.RacHandlers,
  32. proControllers.EventHandlers,
  33. proControllers.TagHandlers,
  34. proControllers.NetworkHandlers,
  35. proControllers.AutoRelayHandlers,
  36. )
  37. controller.ListRoles = proControllers.ListRoles
  38. logic.EnterpriseCheckFuncs = append(logic.EnterpriseCheckFuncs, func() {
  39. // == License Handling ==
  40. enableLicenseHook := true
  41. // licenseKeyValue := servercfg.GetLicenseKey()
  42. // netmakerTenantID := servercfg.GetNetmakerTenantID()
  43. // if licenseKeyValue != "" && netmakerTenantID != "" {
  44. // enableLicenseHook = true
  45. // }
  46. if !enableLicenseHook {
  47. err := initTrial()
  48. if err != nil {
  49. logger.Log(0, "failed to init trial", err.Error())
  50. enableLicenseHook = true
  51. }
  52. trialEndDate, err := getTrialEndDate()
  53. if err != nil {
  54. slog.Error("failed to get trial end date", "error", err)
  55. enableLicenseHook = true
  56. } else {
  57. // check if trial ended
  58. if time.Now().After(trialEndDate) {
  59. // trial ended already
  60. enableLicenseHook = true
  61. }
  62. }
  63. }
  64. if enableLicenseHook {
  65. logger.Log(0, "starting license checker")
  66. ClearLicenseCache()
  67. if err := ValidateLicense(); err != nil {
  68. slog.Error(err.Error())
  69. return
  70. }
  71. logger.Log(0, "proceeding with Paid Tier license")
  72. logic.SetFreeTierForTelemetry(false)
  73. // == End License Handling ==
  74. AddLicenseHooks()
  75. } else {
  76. logger.Log(0, "starting trial license hook")
  77. addTrialLicenseHook()
  78. }
  79. AddUnauthorisedUserNodeHooks()
  80. var authProvider = auth.InitializeAuthProvider()
  81. if authProvider != "" {
  82. slog.Info("OAuth provider,", authProvider+",", "initialized")
  83. } else {
  84. slog.Error("no OAuth provider found or not configured, continuing without OAuth")
  85. }
  86. proLogic.LoadNodeMetricsToCache()
  87. proLogic.InitFailOverCache()
  88. if servercfg.CacheEnabled() {
  89. proLogic.InitAutoRelayCache()
  90. }
  91. auth.ResetIDPSyncHook()
  92. email.Init()
  93. go proLogic.EventWatcher()
  94. })
  95. logic.ResetFailOver = proLogic.ResetFailOver
  96. logic.ResetFailedOverPeer = proLogic.ResetFailedOverPeer
  97. logic.FailOverExists = proLogic.FailOverExists
  98. logic.CreateFailOver = proLogic.CreateFailOver
  99. logic.GetFailOverPeerIps = proLogic.GetFailOverPeerIps
  100. logic.ResetAutoRelay = proLogic.ResetAutoRelay
  101. logic.ResetAutoRelayedPeer = proLogic.ResetAutoRelayedPeer
  102. logic.SetAutoRelay = proLogic.SetAutoRelay
  103. logic.GetAutoRelayPeerIps = proLogic.GetAutoRelayPeerIps
  104. logic.DenyClientNodeAccess = proLogic.DenyClientNode
  105. logic.IsClientNodeAllowed = proLogic.IsClientNodeAllowed
  106. logic.AllowClientNodeAccess = proLogic.RemoveDeniedNodeFromClient
  107. logic.SetClientDefaultACLs = proLogic.SetClientDefaultACLs
  108. logic.SetClientACLs = proLogic.SetClientACLs
  109. logic.UpdateProNodeACLs = proLogic.UpdateProNodeACLs
  110. logic.GetMetrics = proLogic.GetMetrics
  111. logic.UpdateMetrics = proLogic.UpdateMetrics
  112. logic.DeleteMetrics = proLogic.DeleteMetrics
  113. logic.GetTrialEndDate = getTrialEndDate
  114. mq.UpdateMetrics = proLogic.MQUpdateMetrics
  115. mq.UpdateMetricsFallBack = proLogic.MQUpdateMetricsFallBack
  116. logic.GetFilteredNodesByUserAccess = proLogic.GetFilteredNodesByUserAccess
  117. logic.CreateRole = proLogic.CreateRole
  118. logic.UpdateRole = proLogic.UpdateRole
  119. logic.DeleteRole = proLogic.DeleteRole
  120. logic.NetworkPermissionsCheck = proLogic.NetworkPermissionsCheck
  121. logic.GlobalPermissionsCheck = proLogic.GlobalPermissionsCheck
  122. logic.DeleteNetworkRoles = proLogic.DeleteNetworkRoles
  123. logic.CreateDefaultNetworkRolesAndGroups = proLogic.CreateDefaultNetworkRolesAndGroups
  124. logic.FilterNetworksByRole = proLogic.FilterNetworksByRole
  125. logic.IsGroupsValid = proLogic.IsGroupsValid
  126. logic.IsGroupValid = proLogic.IsGroupValid
  127. logic.IsNetworkRolesValid = proLogic.IsNetworkRolesValid
  128. logic.InitialiseRoles = proLogic.UserRolesInit
  129. logic.UpdateUserGwAccess = proLogic.UpdateUserGwAccess
  130. logic.CreateDefaultUserPolicies = proLogic.CreateDefaultUserPolicies
  131. logic.MigrateUserRoleAndGroups = proLogic.MigrateUserRoleAndGroups
  132. logic.MigrateToUUIDs = proLogic.MigrateToUUIDs
  133. logic.IntialiseGroups = proLogic.UserGroupsInit
  134. logic.AddGlobalNetRolesToAdmins = proLogic.AddGlobalNetRolesToAdmins
  135. logic.ListUserGroups = proLogic.ListUserGroups
  136. logic.GetUserGroupsInNetwork = proLogic.GetUserGroupsInNetwork
  137. logic.GetUserGroup = proLogic.GetUserGroup
  138. logic.GetNodeStatus = proLogic.GetNodeStatus
  139. logic.IsOAuthConfigured = auth.IsOAuthConfigured
  140. logic.ResetAuthProvider = auth.ResetAuthProvider
  141. logic.ResetIDPSyncHook = auth.ResetIDPSyncHook
  142. logic.EmailInit = email.Init
  143. logic.LogEvent = proLogic.LogEvent
  144. logic.RemoveUserFromAclPolicy = proLogic.RemoveUserFromAclPolicy
  145. logic.IsUserAllowedToCommunicate = proLogic.IsUserAllowedToCommunicate
  146. logic.DeleteAllNetworkTags = proLogic.DeleteAllNetworkTags
  147. logic.CreateDefaultTags = proLogic.CreateDefaultTags
  148. logic.IsPeerAllowed = proLogic.IsPeerAllowed
  149. logic.IsAclPolicyValid = proLogic.IsAclPolicyValid
  150. logic.GetEgressUserRulesForNode = proLogic.GetEgressUserRulesForNode
  151. logic.GetTagMapWithNodesByNetwork = proLogic.GetTagMapWithNodesByNetwork
  152. logic.GetUserAclRulesForNode = proLogic.GetUserAclRulesForNode
  153. logic.CheckIfAnyPolicyisUniDirectional = proLogic.CheckIfAnyPolicyisUniDirectional
  154. logic.MigrateToGws = proLogic.MigrateToGws
  155. logic.GetFwRulesForNodeAndPeerOnGw = proLogic.GetFwRulesForNodeAndPeerOnGw
  156. logic.GetFwRulesForUserNodesOnGw = proLogic.GetFwRulesForUserNodesOnGw
  157. logic.GetHostLocInfo = proLogic.GetHostLocInfo
  158. logic.GetFeatureFlags = proLogic.GetFeatureFlags
  159. logic.GetNameserversForHost = proLogic.GetNameserversForHost
  160. logic.GetNameserversForNode = proLogic.GetNameserversForNode
  161. logic.ValidateNameserverReq = proLogic.ValidateNameserverReq
  162. logic.ValidateEgressReq = proLogic.ValidateEgressReq
  163. }
  164. func retrieveProLogo() string {
  165. return `
  166. __ __ ______ ______ __ __ ______ __ __ ______ ______
  167. /\ "-.\ \ /\ ___\ /\__ _\ /\ "-./ \ /\ __ \ /\ \/ / /\ ___\ /\ == \
  168. \ \ \-. \ \ \ __\ \/_/\ \/ \ \ \-./\ \ \ \ __ \ \ \ _"-. \ \ __\ \ \ __<
  169. \ \_\\"\_\ \ \_____\ \ \_\ \ \_\ \ \_\ \ \_\ \_\ \ \_\ \_\ \ \_____\ \ \_\ \_\
  170. \/_/ \/_/ \/_____/ \/_/ \/_/ \/_/ \/_/\/_/ \/_/\/_/ \/_____/ \/_/ /_/
  171. ___ ___ ____
  172. ____ ____ ____ / _ \ / _ \ / __ \ ____ ____ ____
  173. /___/ /___/ /___/ / ___/ / , _// /_/ / /___/ /___/ /___/
  174. /___/ /___/ /___/ /_/ /_/|_| \____/ /___/ /___/ /___/
  175. `
  176. }