123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- //go:build ee
- // +build ee
- package pro
- import (
- "time"
- controller "github.com/gravitl/netmaker/controllers"
- "github.com/gravitl/netmaker/logger"
- "github.com/gravitl/netmaker/logic"
- "github.com/gravitl/netmaker/models"
- "github.com/gravitl/netmaker/mq"
- "github.com/gravitl/netmaker/pro/auth"
- proControllers "github.com/gravitl/netmaker/pro/controllers"
- "github.com/gravitl/netmaker/pro/email"
- proLogic "github.com/gravitl/netmaker/pro/logic"
- "github.com/gravitl/netmaker/servercfg"
- "golang.org/x/exp/slog"
- )
- // InitPro - Initialize Pro Logic
- func InitPro() {
- servercfg.IsPro = true
- models.SetLogo(retrieveProLogo())
- controller.HttpMiddlewares = append(
- controller.HttpMiddlewares,
- proControllers.OnlyServerAPIWhenUnlicensedMiddleware,
- )
- controller.HttpHandlers = append(
- controller.HttpHandlers,
- proControllers.MetricHandlers,
- proControllers.UserHandlers,
- proControllers.FailOverHandlers,
- proControllers.RacHandlers,
- proControllers.EventHandlers,
- proControllers.TagHandlers,
- )
- controller.ListRoles = proControllers.ListRoles
- logic.EnterpriseCheckFuncs = append(logic.EnterpriseCheckFuncs, func() {
- // == License Handling ==
- enableLicenseHook := true
- // licenseKeyValue := servercfg.GetLicenseKey()
- // netmakerTenantID := servercfg.GetNetmakerTenantID()
- // if licenseKeyValue != "" && netmakerTenantID != "" {
- // enableLicenseHook = true
- // }
- if !enableLicenseHook {
- err := initTrial()
- if err != nil {
- logger.Log(0, "failed to init trial", err.Error())
- enableLicenseHook = true
- }
- trialEndDate, err := getTrialEndDate()
- if err != nil {
- slog.Error("failed to get trial end date", "error", err)
- enableLicenseHook = true
- } else {
- // check if trial ended
- if time.Now().After(trialEndDate) {
- // trial ended already
- enableLicenseHook = true
- }
- }
- }
- if enableLicenseHook {
- logger.Log(0, "starting license checker")
- ClearLicenseCache()
- if err := ValidateLicense(); err != nil {
- slog.Error(err.Error())
- return
- }
- logger.Log(0, "proceeding with Paid Tier license")
- logic.SetFreeTierForTelemetry(false)
- // == End License Handling ==
- AddLicenseHooks()
- } else {
- logger.Log(0, "starting trial license hook")
- addTrialLicenseHook()
- }
- AddUnauthorisedUserNodeHooks()
- var authProvider = auth.InitializeAuthProvider()
- if authProvider != "" {
- slog.Info("OAuth provider,", authProvider+",", "initialized")
- } else {
- slog.Error("no OAuth provider found or not configured, continuing without OAuth")
- }
- proLogic.LoadNodeMetricsToCache()
- proLogic.InitFailOverCache()
- auth.ResetIDPSyncHook()
- email.Init()
- go proLogic.EventWatcher()
- })
- logic.ResetFailOver = proLogic.ResetFailOver
- logic.ResetFailedOverPeer = proLogic.ResetFailedOverPeer
- logic.FailOverExists = proLogic.FailOverExists
- logic.CreateFailOver = proLogic.CreateFailOver
- logic.GetFailOverPeerIps = proLogic.GetFailOverPeerIps
- logic.DenyClientNodeAccess = proLogic.DenyClientNode
- logic.IsClientNodeAllowed = proLogic.IsClientNodeAllowed
- logic.AllowClientNodeAccess = proLogic.RemoveDeniedNodeFromClient
- logic.SetClientDefaultACLs = proLogic.SetClientDefaultACLs
- logic.SetClientACLs = proLogic.SetClientACLs
- logic.UpdateProNodeACLs = proLogic.UpdateProNodeACLs
- logic.GetMetrics = proLogic.GetMetrics
- logic.UpdateMetrics = proLogic.UpdateMetrics
- logic.DeleteMetrics = proLogic.DeleteMetrics
- logic.GetTrialEndDate = getTrialEndDate
- mq.UpdateMetrics = proLogic.MQUpdateMetrics
- mq.UpdateMetricsFallBack = proLogic.MQUpdateMetricsFallBack
- logic.GetFilteredNodesByUserAccess = proLogic.GetFilteredNodesByUserAccess
- logic.CreateRole = proLogic.CreateRole
- logic.UpdateRole = proLogic.UpdateRole
- logic.DeleteRole = proLogic.DeleteRole
- logic.NetworkPermissionsCheck = proLogic.NetworkPermissionsCheck
- logic.GlobalPermissionsCheck = proLogic.GlobalPermissionsCheck
- logic.DeleteNetworkRoles = proLogic.DeleteNetworkRoles
- logic.CreateDefaultNetworkRolesAndGroups = proLogic.CreateDefaultNetworkRolesAndGroups
- logic.FilterNetworksByRole = proLogic.FilterNetworksByRole
- logic.IsGroupsValid = proLogic.IsGroupsValid
- logic.IsGroupValid = proLogic.IsGroupValid
- logic.IsNetworkRolesValid = proLogic.IsNetworkRolesValid
- logic.InitialiseRoles = proLogic.UserRolesInit
- logic.UpdateUserGwAccess = proLogic.UpdateUserGwAccess
- logic.CreateDefaultUserPolicies = proLogic.CreateDefaultUserPolicies
- logic.MigrateUserRoleAndGroups = proLogic.MigrateUserRoleAndGroups
- logic.MigrateToUUIDs = proLogic.MigrateToUUIDs
- logic.IntialiseGroups = proLogic.UserGroupsInit
- logic.AddGlobalNetRolesToAdmins = proLogic.AddGlobalNetRolesToAdmins
- logic.GetUserGroupsInNetwork = proLogic.GetUserGroupsInNetwork
- logic.GetUserGroup = proLogic.GetUserGroup
- logic.GetNodeStatus = proLogic.GetNodeStatus
- logic.ResetAuthProvider = auth.ResetAuthProvider
- logic.ResetIDPSyncHook = auth.ResetIDPSyncHook
- logic.EmailInit = email.Init
- logic.LogEvent = proLogic.LogEvent
- logic.RemoveUserFromAclPolicy = proLogic.RemoveUserFromAclPolicy
- logic.IsUserAllowedToCommunicate = proLogic.IsUserAllowedToCommunicate
- logic.DeleteAllNetworkTags = proLogic.DeleteAllNetworkTags
- logic.CreateDefaultTags = proLogic.CreateDefaultTags
- logic.GetInetClientsFromAclPolicies = proLogic.GetInetClientsFromAclPolicies
- logic.IsPeerAllowed = proLogic.IsPeerAllowed
- logic.IsAclPolicyValid = proLogic.IsAclPolicyValid
- logic.GetEgressRulesForNode = proLogic.GetEgressRulesForNode
- logic.GetAclRuleForInetGw = proLogic.GetAclRuleForInetGw
- logic.GetAclRulesForNode = proLogic.GetAclRulesForNode
- logic.CheckIfAnyActiveEgressPolicy = proLogic.CheckIfAnyActiveEgressPolicy
- logic.CheckIfAnyPolicyisUniDirectional = proLogic.CheckIfAnyPolicyisUniDirectional
- logic.MigrateToGws = proLogic.MigrateToGws
- logic.IsNodeAllowedToCommunicate = proLogic.IsNodeAllowedToCommunicate
- logic.GetFwRulesForNodeAndPeerOnGw = proLogic.GetFwRulesForNodeAndPeerOnGw
- logic.GetFwRulesForUserNodesOnGw = proLogic.GetFwRulesForUserNodesOnGw
- logic.GetHostLocInfo = proLogic.GetHostLocInfo
- }
- func retrieveProLogo() string {
- return `
- __ __ ______ ______ __ __ ______ __ __ ______ ______
- /\ "-.\ \ /\ ___\ /\__ _\ /\ "-./ \ /\ __ \ /\ \/ / /\ ___\ /\ == \
- \ \ \-. \ \ \ __\ \/_/\ \/ \ \ \-./\ \ \ \ __ \ \ \ _"-. \ \ __\ \ \ __<
- \ \_\\"\_\ \ \_____\ \ \_\ \ \_\ \ \_\ \ \_\ \_\ \ \_\ \_\ \ \_____\ \ \_\ \_\
- \/_/ \/_/ \/_____/ \/_/ \/_/ \/_/ \/_/\/_/ \/_/\/_/ \/_____/ \/_/ /_/
-
- ___ ___ ____
- ____ ____ ____ / _ \ / _ \ / __ \ ____ ____ ____
- /___/ /___/ /___/ / ___/ / , _// /_/ / /___/ /___/ /___/
- /___/ /___/ /___/ /_/ /_/|_| \____/ /___/ /___/ /___/
-
- `
- }
|