github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/app/enterprise.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package app
     5  
     6  import (
     7  	"github.com/mattermost/mattermost-server/v5/einterfaces"
     8  	ejobs "github.com/mattermost/mattermost-server/v5/einterfaces/jobs"
     9  	tjobs "github.com/mattermost/mattermost-server/v5/jobs/interfaces"
    10  	"github.com/mattermost/mattermost-server/v5/mlog"
    11  	"github.com/mattermost/mattermost-server/v5/model"
    12  	"github.com/mattermost/mattermost-server/v5/services/searchengine"
    13  )
    14  
    15  var accountMigrationInterface func(*App) einterfaces.AccountMigrationInterface
    16  
    17  func RegisterAccountMigrationInterface(f func(*App) einterfaces.AccountMigrationInterface) {
    18  	accountMigrationInterface = f
    19  }
    20  
    21  var clusterInterface func(*Server) einterfaces.ClusterInterface
    22  
    23  func RegisterClusterInterface(f func(*Server) einterfaces.ClusterInterface) {
    24  	clusterInterface = f
    25  }
    26  
    27  var complianceInterface func(*Server) einterfaces.ComplianceInterface
    28  
    29  func RegisterComplianceInterface(f func(*Server) einterfaces.ComplianceInterface) {
    30  	complianceInterface = f
    31  }
    32  
    33  var dataRetentionInterface func(*Server) einterfaces.DataRetentionInterface
    34  
    35  func RegisterDataRetentionInterface(f func(*Server) einterfaces.DataRetentionInterface) {
    36  	dataRetentionInterface = f
    37  }
    38  
    39  var elasticsearchInterface func(*Server) searchengine.SearchEngineInterface
    40  
    41  func RegisterElasticsearchInterface(f func(*Server) searchengine.SearchEngineInterface) {
    42  	elasticsearchInterface = f
    43  }
    44  
    45  var jobsDataRetentionJobInterface func(*Server) ejobs.DataRetentionJobInterface
    46  
    47  func RegisterJobsDataRetentionJobInterface(f func(*Server) ejobs.DataRetentionJobInterface) {
    48  	jobsDataRetentionJobInterface = f
    49  }
    50  
    51  var jobsMessageExportJobInterface func(*Server) ejobs.MessageExportJobInterface
    52  
    53  func RegisterJobsMessageExportJobInterface(f func(*Server) ejobs.MessageExportJobInterface) {
    54  	jobsMessageExportJobInterface = f
    55  }
    56  
    57  var jobsElasticsearchAggregatorInterface func(*Server) ejobs.ElasticsearchAggregatorInterface
    58  
    59  func RegisterJobsElasticsearchAggregatorInterface(f func(*Server) ejobs.ElasticsearchAggregatorInterface) {
    60  	jobsElasticsearchAggregatorInterface = f
    61  }
    62  
    63  var jobsElasticsearchIndexerInterface func(*Server) tjobs.IndexerJobInterface
    64  
    65  func RegisterJobsElasticsearchIndexerInterface(f func(*Server) tjobs.IndexerJobInterface) {
    66  	jobsElasticsearchIndexerInterface = f
    67  }
    68  
    69  var jobsLdapSyncInterface func(*App) ejobs.LdapSyncInterface
    70  
    71  func RegisterJobsLdapSyncInterface(f func(*App) ejobs.LdapSyncInterface) {
    72  	jobsLdapSyncInterface = f
    73  }
    74  
    75  var jobsMigrationsInterface func(*Server) tjobs.MigrationsJobInterface
    76  
    77  func RegisterJobsMigrationsJobInterface(f func(*Server) tjobs.MigrationsJobInterface) {
    78  	jobsMigrationsInterface = f
    79  }
    80  
    81  var jobsPluginsInterface func(*App) tjobs.PluginsJobInterface
    82  
    83  func RegisterJobsPluginsJobInterface(f func(*App) tjobs.PluginsJobInterface) {
    84  	jobsPluginsInterface = f
    85  }
    86  
    87  var jobsBleveIndexerInterface func(*Server) tjobs.IndexerJobInterface
    88  
    89  func RegisterJobsBleveIndexerInterface(f func(*Server) tjobs.IndexerJobInterface) {
    90  	jobsBleveIndexerInterface = f
    91  }
    92  
    93  var jobsExpiryNotifyInterface func(*App) tjobs.ExpiryNotifyJobInterface
    94  
    95  func RegisterJobsExpiryNotifyJobInterface(f func(*App) tjobs.ExpiryNotifyJobInterface) {
    96  	jobsExpiryNotifyInterface = f
    97  }
    98  
    99  var ldapInterface func(*App) einterfaces.LdapInterface
   100  
   101  func RegisterLdapInterface(f func(*App) einterfaces.LdapInterface) {
   102  	ldapInterface = f
   103  }
   104  
   105  var messageExportInterface func(*Server) einterfaces.MessageExportInterface
   106  
   107  func RegisterMessageExportInterface(f func(*Server) einterfaces.MessageExportInterface) {
   108  	messageExportInterface = f
   109  }
   110  
   111  var metricsInterface func(*Server) einterfaces.MetricsInterface
   112  
   113  func RegisterMetricsInterface(f func(*Server) einterfaces.MetricsInterface) {
   114  	metricsInterface = f
   115  }
   116  
   117  var samlInterface func(*App) einterfaces.SamlInterface
   118  
   119  func RegisterSamlInterface(f func(*App) einterfaces.SamlInterface) {
   120  	samlInterface = f
   121  }
   122  
   123  var samlInterfaceNew func(*App) einterfaces.SamlInterface
   124  
   125  func RegisterNewSamlInterface(f func(*App) einterfaces.SamlInterface) {
   126  	samlInterfaceNew = f
   127  }
   128  
   129  var notificationInterface func(*App) einterfaces.NotificationInterface
   130  
   131  func RegisterNotificationInterface(f func(*App) einterfaces.NotificationInterface) {
   132  	notificationInterface = f
   133  }
   134  
   135  func (s *Server) initEnterprise() {
   136  	if metricsInterface != nil {
   137  		s.Metrics = metricsInterface(s)
   138  	}
   139  	if complianceInterface != nil {
   140  		s.Compliance = complianceInterface(s)
   141  	}
   142  	if messageExportInterface != nil {
   143  		s.MessageExport = messageExportInterface(s)
   144  	}
   145  	if dataRetentionInterface != nil {
   146  		s.DataRetention = dataRetentionInterface(s)
   147  	}
   148  	if clusterInterface != nil {
   149  		s.Cluster = clusterInterface(s)
   150  	}
   151  	if elasticsearchInterface != nil {
   152  		s.SearchEngine.RegisterElasticsearchEngine(elasticsearchInterface(s))
   153  	}
   154  }
   155  
   156  func (a *App) initEnterprise() {
   157  	if accountMigrationInterface != nil {
   158  		a.srv.AccountMigration = accountMigrationInterface(a)
   159  	}
   160  	if ldapInterface != nil {
   161  		a.srv.Ldap = ldapInterface(a)
   162  	}
   163  	if notificationInterface != nil {
   164  		a.srv.Notification = notificationInterface(a)
   165  	}
   166  	if samlInterface != nil {
   167  		if *a.Config().ExperimentalSettings.UseNewSAMLLibrary && samlInterfaceNew != nil {
   168  			mlog.Debug("Loading new SAML2 library")
   169  			a.srv.Saml = samlInterfaceNew(a)
   170  		} else {
   171  			mlog.Debug("Loading original SAML library")
   172  			a.srv.Saml = samlInterface(a)
   173  		}
   174  		if err := a.srv.Saml.ConfigureSP(); err != nil {
   175  			mlog.Error("An error occurred while configuring SAML Service Provider", mlog.Err(err))
   176  		}
   177  		a.AddConfigListener(func(_, cfg *model.Config) {
   178  			if err := a.srv.Saml.ConfigureSP(); err != nil {
   179  				mlog.Error("An error occurred while configuring SAML Service Provider", mlog.Err(err))
   180  			}
   181  		})
   182  	}
   183  }