summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris <ccbrown112@gmail.com>2017-09-21 04:13:34 -0500
committerGeorge Goldberg <george@gberg.me>2017-09-21 10:13:34 +0100
commit266ff8670244da288aec937320d9eecc7996af35 (patch)
tree39e4e528cda0abb24be317683516ee246717fc68
parentadab1a660fdc0c307238279edc7a9918d14577e5 (diff)
downloadchat-266ff8670244da288aec937320d9eecc7996af35.tar.gz
chat-266ff8670244da288aec937320d9eecc7996af35.tar.bz2
chat-266ff8670244da288aec937320d9eecc7996af35.zip
remove more global refs (#7480)
-rw-r--r--api/api.go3
-rw-r--r--api/post_test.go34
-rw-r--r--api4/api.go3
-rw-r--r--app/admin.go4
-rw-r--r--app/app.go94
-rw-r--r--app/cluster_discovery.go16
-rw-r--r--app/cluster_discovery_test.go4
-rw-r--r--app/server.go2
-rw-r--r--cmd/platform/channel.go24
-rw-r--r--cmd/platform/channelargs.go12
-rw-r--r--cmd/platform/import.go2
-rw-r--r--cmd/platform/jobserver.go8
-rw-r--r--cmd/platform/roles.go4
-rw-r--r--cmd/platform/team.go10
-rw-r--r--cmd/platform/teamargs.go10
-rw-r--r--cmd/platform/user.go18
-rw-r--r--cmd/platform/userargs.go12
-rw-r--r--einterfaces/account_migration.go10
-rw-r--r--einterfaces/cluster.go10
-rw-r--r--einterfaces/compliance.go10
-rw-r--r--einterfaces/ldap.go10
-rw-r--r--einterfaces/metrics.go10
-rw-r--r--einterfaces/mfa.go10
-rw-r--r--einterfaces/saml.go10
-rw-r--r--store/layered_store.go6
-rw-r--r--store/local_cache_supplier.go10
-rw-r--r--store/sql_store_test.go2
-rw-r--r--utils/config.go21
28 files changed, 179 insertions, 190 deletions
diff --git a/api/api.go b/api/api.go
index 313cbc7e1..2dca63a07 100644
--- a/api/api.go
+++ b/api/api.go
@@ -9,7 +9,6 @@ import (
l4g "github.com/alecthomas/log4go"
"github.com/gorilla/mux"
"github.com/mattermost/mattermost-server/app"
- "github.com/mattermost/mattermost-server/einterfaces"
"github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/utils"
@@ -124,7 +123,7 @@ func InitApi(root *mux.Router) {
}
func HandleEtag(etag string, routeName string, w http.ResponseWriter, r *http.Request) bool {
- metrics := einterfaces.GetMetricsInterface()
+ metrics := app.Global().Metrics
if et := r.Header.Get(model.HEADER_ETAG_CLIENT); len(etag) > 0 {
if et == etag {
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
diff --git a/api/post_test.go b/api/post_test.go
index f571aacd1..1fb6b3ded 100644
--- a/api/post_test.go
+++ b/api/post_test.go
@@ -1187,30 +1187,30 @@ func TestGetFlaggedPosts(t *testing.T) {
}
func TestGetMessageForNotification(t *testing.T) {
- Setup().InitBasic()
+ th := Setup().InitBasic()
- testPng := store.Must(app.Global().Srv.Store.FileInfo().Save(&model.FileInfo{
+ testPng := store.Must(th.App.Srv.Store.FileInfo().Save(&model.FileInfo{
CreatorId: model.NewId(),
Path: "test1.png",
Name: "test1.png",
MimeType: "image/png",
})).(*model.FileInfo)
- testJpg1 := store.Must(app.Global().Srv.Store.FileInfo().Save(&model.FileInfo{
+ testJpg1 := store.Must(th.App.Srv.Store.FileInfo().Save(&model.FileInfo{
CreatorId: model.NewId(),
Path: "test2.jpg",
Name: "test2.jpg",
MimeType: "image/jpeg",
})).(*model.FileInfo)
- testFile := store.Must(app.Global().Srv.Store.FileInfo().Save(&model.FileInfo{
+ testFile := store.Must(th.App.Srv.Store.FileInfo().Save(&model.FileInfo{
CreatorId: model.NewId(),
Path: "test1.go",
Name: "test1.go",
MimeType: "text/plain",
})).(*model.FileInfo)
- testJpg2 := store.Must(app.Global().Srv.Store.FileInfo().Save(&model.FileInfo{
+ testJpg2 := store.Must(th.App.Srv.Store.FileInfo().Save(&model.FileInfo{
CreatorId: model.NewId(),
Path: "test3.jpg",
Name: "test3.jpg",
@@ -1224,39 +1224,39 @@ func TestGetMessageForNotification(t *testing.T) {
Message: "test",
}
- if app.Global().GetMessageForNotification(post, translateFunc) != "test" {
+ if th.App.GetMessageForNotification(post, translateFunc) != "test" {
t.Fatal("should've returned message text")
}
post.FileIds = model.StringArray{testPng.Id}
- store.Must(app.Global().Srv.Store.FileInfo().AttachToPost(testPng.Id, post.Id))
- if app.Global().GetMessageForNotification(post, translateFunc) != "test" {
+ store.Must(th.App.Srv.Store.FileInfo().AttachToPost(testPng.Id, post.Id))
+ if th.App.GetMessageForNotification(post, translateFunc) != "test" {
t.Fatal("should've returned message text, even with attachments")
}
post.Message = ""
- if message := app.Global().GetMessageForNotification(post, translateFunc); message != "1 image sent: test1.png" {
+ if message := th.App.GetMessageForNotification(post, translateFunc); message != "1 image sent: test1.png" {
t.Fatal("should've returned number of images:", message)
}
post.FileIds = model.StringArray{testPng.Id, testJpg1.Id}
- store.Must(app.Global().Srv.Store.FileInfo().AttachToPost(testJpg1.Id, post.Id))
- app.Global().Srv.Store.FileInfo().InvalidateFileInfosForPostCache(post.Id)
- if message := app.Global().GetMessageForNotification(post, translateFunc); message != "2 images sent: test1.png, test2.jpg" && message != "2 images sent: test2.jpg, test1.png" {
+ store.Must(th.App.Srv.Store.FileInfo().AttachToPost(testJpg1.Id, post.Id))
+ th.App.Srv.Store.FileInfo().InvalidateFileInfosForPostCache(post.Id)
+ if message := th.App.GetMessageForNotification(post, translateFunc); message != "2 images sent: test1.png, test2.jpg" && message != "2 images sent: test2.jpg, test1.png" {
t.Fatal("should've returned number of images:", message)
}
post.Id = model.NewId()
post.FileIds = model.StringArray{testFile.Id}
- store.Must(app.Global().Srv.Store.FileInfo().AttachToPost(testFile.Id, post.Id))
- if message := app.Global().GetMessageForNotification(post, translateFunc); message != "1 file sent: test1.go" {
+ store.Must(th.App.Srv.Store.FileInfo().AttachToPost(testFile.Id, post.Id))
+ if message := th.App.GetMessageForNotification(post, translateFunc); message != "1 file sent: test1.go" {
t.Fatal("should've returned number of files:", message)
}
- store.Must(app.Global().Srv.Store.FileInfo().AttachToPost(testJpg2.Id, post.Id))
- app.Global().Srv.Store.FileInfo().InvalidateFileInfosForPostCache(post.Id)
+ store.Must(th.App.Srv.Store.FileInfo().AttachToPost(testJpg2.Id, post.Id))
+ th.App.Srv.Store.FileInfo().InvalidateFileInfosForPostCache(post.Id)
post.FileIds = model.StringArray{testFile.Id, testJpg2.Id}
- if message := app.Global().GetMessageForNotification(post, translateFunc); message != "2 files sent: test1.go, test3.jpg" && message != "2 files sent: test3.jpg, test1.go" {
+ if message := th.App.GetMessageForNotification(post, translateFunc); message != "2 files sent: test1.go, test3.jpg" && message != "2 files sent: test3.jpg, test1.go" {
t.Fatal("should've returned number of mixed files:", message)
}
}
diff --git a/api4/api.go b/api4/api.go
index 7b3beaf40..16c816528 100644
--- a/api4/api.go
+++ b/api4/api.go
@@ -9,7 +9,6 @@ import (
l4g "github.com/alecthomas/log4go"
"github.com/gorilla/mux"
"github.com/mattermost/mattermost-server/app"
- "github.com/mattermost/mattermost-server/einterfaces"
"github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/utils"
@@ -225,7 +224,7 @@ func InitApi(root *mux.Router, full bool) {
}
func HandleEtag(etag string, routeName string, w http.ResponseWriter, r *http.Request) bool {
- metrics := einterfaces.GetMetricsInterface()
+ metrics := app.Global().Metrics
if et := r.Header.Get(model.HEADER_ETAG_CLIENT); len(etag) > 0 {
if et == etag {
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
diff --git a/app/admin.go b/app/admin.go
index 1bd33527b..022d86f3c 100644
--- a/app/admin.go
+++ b/app/admin.go
@@ -149,7 +149,7 @@ func (a *App) SaveConfig(cfg *model.Config, sendConfigChangeClusterMessage bool)
return err
}
- if err := utils.ValidateLdapFilter(cfg); err != nil {
+ if err := utils.ValidateLdapFilter(cfg, a.Ldap); err != nil {
return err
}
@@ -187,7 +187,7 @@ func (a *App) RecycleDatabaseConnection() {
oldStore := a.Srv.Store
l4g.Warn(utils.T("api.admin.recycle_db_start.warn"))
- a.Srv.Store = store.NewLayeredStore()
+ a.Srv.Store = store.NewLayeredStore(a.Metrics, a.Cluster)
jobs.Srv.Store = a.Srv.Store
diff --git a/app/app.go b/app/app.go
index bf4a6b1b6..1289e4a6d 100644
--- a/app/app.go
+++ b/app/app.go
@@ -9,7 +9,9 @@ import (
"sync"
"github.com/mattermost/mattermost-server/einterfaces"
+ "github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/plugin/pluginenv"
+ "github.com/mattermost/mattermost-server/utils"
)
type App struct {
@@ -35,19 +37,93 @@ var initEnterprise sync.Once
func Global() *App {
initEnterprise.Do(func() {
- globalApp.AccountMigration = einterfaces.GetAccountMigrationInterface()
- globalApp.Brand = einterfaces.GetBrandInterface()
- globalApp.Cluster = einterfaces.GetClusterInterface()
- globalApp.Compliance = einterfaces.GetComplianceInterface()
- globalApp.Elasticsearch = einterfaces.GetElasticsearchInterface()
- globalApp.Ldap = einterfaces.GetLdapInterface()
- globalApp.Metrics = einterfaces.GetMetricsInterface()
- globalApp.Mfa = einterfaces.GetMfaInterface()
- globalApp.Saml = einterfaces.GetSamlInterface()
+ globalApp.initEnterprise()
})
return &globalApp
}
+var accountMigrationInterface func(*App) einterfaces.AccountMigrationInterface
+
+func RegisterAccountMigrationInterface(f func(*App) einterfaces.AccountMigrationInterface) {
+ accountMigrationInterface = f
+}
+
+var clusterInterface func(*App) einterfaces.ClusterInterface
+
+func RegisterClusterInterface(f func(*App) einterfaces.ClusterInterface) {
+ clusterInterface = f
+}
+
+var complianceInterface func(*App) einterfaces.ComplianceInterface
+
+func RegisterComplianceInterface(f func(*App) einterfaces.ComplianceInterface) {
+ complianceInterface = f
+}
+
+var ldapInterface func(*App) einterfaces.LdapInterface
+
+func RegisterLdapInterface(f func(*App) einterfaces.LdapInterface) {
+ ldapInterface = f
+}
+
+var metricsInterface func(*App) einterfaces.MetricsInterface
+
+func RegisterMetricsInterface(f func(*App) einterfaces.MetricsInterface) {
+ metricsInterface = f
+}
+
+var mfaInterface func(*App) einterfaces.MfaInterface
+
+func RegisterMfaInterface(f func(*App) einterfaces.MfaInterface) {
+ mfaInterface = f
+}
+
+var samlInterface func(*App) einterfaces.SamlInterface
+
+func RegisterSamlInterface(f func(*App) einterfaces.SamlInterface) {
+ samlInterface = f
+}
+
+func (a *App) initEnterprise() {
+ if accountMigrationInterface != nil {
+ a.AccountMigration = accountMigrationInterface(a)
+ }
+ a.Brand = einterfaces.GetBrandInterface()
+ if clusterInterface != nil {
+ a.Cluster = clusterInterface(a)
+ }
+ if complianceInterface != nil {
+ a.Compliance = complianceInterface(a)
+ }
+ a.Elasticsearch = einterfaces.GetElasticsearchInterface()
+ if ldapInterface != nil {
+ a.Ldap = ldapInterface(a)
+ utils.AddConfigListener(func(_, cfg *model.Config) {
+ if err := utils.ValidateLdapFilter(cfg, a.Ldap); err != nil {
+ panic(utils.T(err.Id))
+ }
+
+ a.Ldap.StartLdapSyncJob()
+ })
+ }
+ if metricsInterface != nil {
+ a.Metrics = metricsInterface(a)
+ }
+ if mfaInterface != nil {
+ a.Mfa = mfaInterface(a)
+ }
+ if samlInterface != nil {
+ a.Saml = samlInterface(a)
+ utils.AddConfigListener(func(_, cfg *model.Config) {
+ a.Saml.ConfigureSP()
+ })
+ }
+}
+
+func (a *App) Config() *model.Config {
+ return utils.Cfg
+}
+
func CloseBody(r *http.Response) {
if r.Body != nil {
ioutil.ReadAll(r.Body)
diff --git a/app/cluster_discovery.go b/app/cluster_discovery.go
index 223b012dd..5278b339d 100644
--- a/app/cluster_discovery.go
+++ b/app/cluster_discovery.go
@@ -18,12 +18,14 @@ const (
type ClusterDiscoveryService struct {
model.ClusterDiscovery
+ app *App
stop chan bool
}
-func NewClusterDiscoveryService() *ClusterDiscoveryService {
+func (a *App) NewClusterDiscoveryService() *ClusterDiscoveryService {
ds := &ClusterDiscoveryService{
ClusterDiscovery: model.ClusterDiscovery{},
+ app: a,
stop: make(chan bool),
}
@@ -32,19 +34,19 @@ func NewClusterDiscoveryService() *ClusterDiscoveryService {
func (me *ClusterDiscoveryService) Start() {
- <-Global().Srv.Store.ClusterDiscovery().Cleanup()
+ <-me.app.Srv.Store.ClusterDiscovery().Cleanup()
- if cresult := <-Global().Srv.Store.ClusterDiscovery().Exists(&me.ClusterDiscovery); cresult.Err != nil {
+ if cresult := <-me.app.Srv.Store.ClusterDiscovery().Exists(&me.ClusterDiscovery); cresult.Err != nil {
l4g.Error(fmt.Sprintf("ClusterDiscoveryService failed to check if row exists for %v with err=%v", me.ClusterDiscovery.ToJson(), cresult.Err))
} else {
if cresult.Data.(bool) {
- if u := <-Global().Srv.Store.ClusterDiscovery().Delete(&me.ClusterDiscovery); u.Err != nil {
+ if u := <-me.app.Srv.Store.ClusterDiscovery().Delete(&me.ClusterDiscovery); u.Err != nil {
l4g.Error(fmt.Sprintf("ClusterDiscoveryService failed to start clean for %v with err=%v", me.ClusterDiscovery.ToJson(), u.Err))
}
}
}
- if result := <-Global().Srv.Store.ClusterDiscovery().Save(&me.ClusterDiscovery); result.Err != nil {
+ if result := <-me.app.Srv.Store.ClusterDiscovery().Save(&me.ClusterDiscovery); result.Err != nil {
l4g.Error(fmt.Sprintf("ClusterDiscoveryService failed to save for %v with err=%v", me.ClusterDiscovery.ToJson(), result.Err))
return
}
@@ -54,7 +56,7 @@ func (me *ClusterDiscoveryService) Start() {
ticker := time.NewTicker(DISCOVERY_SERVICE_WRITE_PING)
defer func() {
ticker.Stop()
- if u := <-Global().Srv.Store.ClusterDiscovery().Delete(&me.ClusterDiscovery); u.Err != nil {
+ if u := <-me.app.Srv.Store.ClusterDiscovery().Delete(&me.ClusterDiscovery); u.Err != nil {
l4g.Error(fmt.Sprintf("ClusterDiscoveryService failed to cleanup for %v with err=%v", me.ClusterDiscovery.ToJson(), u.Err))
}
l4g.Debug(fmt.Sprintf("ClusterDiscoveryService ping writer stopped for %v", me.ClusterDiscovery.ToJson()))
@@ -63,7 +65,7 @@ func (me *ClusterDiscoveryService) Start() {
for {
select {
case <-ticker.C:
- if u := <-Global().Srv.Store.ClusterDiscovery().SetLastPingAt(&me.ClusterDiscovery); u.Err != nil {
+ if u := <-me.app.Srv.Store.ClusterDiscovery().SetLastPingAt(&me.ClusterDiscovery); u.Err != nil {
l4g.Error(fmt.Sprintf("ClusterDiscoveryService failed to write ping for %v with err=%v", me.ClusterDiscovery.ToJson(), u.Err))
}
case <-me.stop:
diff --git a/app/cluster_discovery_test.go b/app/cluster_discovery_test.go
index e8ce62b5c..cd61c0f03 100644
--- a/app/cluster_discovery_test.go
+++ b/app/cluster_discovery_test.go
@@ -12,9 +12,9 @@ import (
)
func TestClusterDiscoveryService(t *testing.T) {
- Setup()
+ th := Setup()
- ds := NewClusterDiscoveryService()
+ ds := th.App.NewClusterDiscoveryService()
ds.Type = model.CDS_TYPE_APP
ds.ClusterName = "ClusterA"
ds.AutoFillHostname()
diff --git a/app/server.go b/app/server.go
index c44408d12..1564a6344 100644
--- a/app/server.go
+++ b/app/server.go
@@ -84,7 +84,7 @@ func (a *App) NewServer() {
}
func (a *App) InitStores() {
- a.Srv.Store = store.NewLayeredStore()
+ a.Srv.Store = store.NewLayeredStore(a.Metrics, a.Cluster)
}
type VaryBy struct{}
diff --git a/cmd/platform/channel.go b/cmd/platform/channel.go
index b1fededb6..d2a4edc6a 100644
--- a/cmd/platform/channel.go
+++ b/cmd/platform/channel.go
@@ -151,7 +151,7 @@ func createChannelCmdF(cmd *cobra.Command, args []string) error {
channelType = model.CHANNEL_PRIVATE
}
- team := getTeamFromTeamArg(teamArg)
+ team := getTeamFromTeamArg(a, teamArg)
if team == nil {
return errors.New("Unable to find team: " + teamArg)
}
@@ -183,12 +183,12 @@ func removeChannelUsersCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Not enough arguments.")
}
- channel := getChannelFromChannelArg(args[0])
+ channel := getChannelFromChannelArg(a, args[0])
if channel == nil {
return errors.New("Unable to find channel '" + args[0] + "'")
}
- users := getUsersFromUserArgs(args[1:])
+ users := getUsersFromUserArgs(a, args[1:])
for i, user := range users {
removeUserFromChannel(a, channel, user, args[i+1])
}
@@ -216,12 +216,12 @@ func addChannelUsersCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Not enough arguments.")
}
- channel := getChannelFromChannelArg(args[0])
+ channel := getChannelFromChannelArg(a, args[0])
if channel == nil {
return errors.New("Unable to find channel '" + args[0] + "'")
}
- users := getUsersFromUserArgs(args[1:])
+ users := getUsersFromUserArgs(a, args[1:])
for i, user := range users {
addUserToChannel(a, channel, user, args[i+1])
}
@@ -249,7 +249,7 @@ func archiveChannelsCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Enter at least one channel to archive.")
}
- channels := getChannelsFromChannelArgs(args)
+ channels := getChannelsFromChannelArgs(a, args)
for i, channel := range channels {
if channel == nil {
CommandPrintErrorln("Unable to find channel '" + args[i] + "'")
@@ -283,7 +283,7 @@ func deleteChannelsCmdF(cmd *cobra.Command, args []string) error {
}
}
- channels := getChannelsFromChannelArgs(args)
+ channels := getChannelsFromChannelArgs(a, args)
for i, channel := range channels {
if channel == nil {
CommandPrintErrorln("Unable to find channel '" + args[i] + "'")
@@ -313,12 +313,12 @@ func moveChannelsCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Enter the destination team and at least one channel to move.")
}
- team := getTeamFromTeamArg(args[0])
+ team := getTeamFromTeamArg(a, args[0])
if team == nil {
return errors.New("Unable to find destination team '" + args[0] + "'")
}
- channels := getChannelsFromChannelArgs(args[1:])
+ channels := getChannelsFromChannelArgs(a, args[1:])
for i, channel := range channels {
if channel == nil {
CommandPrintErrorln("Unable to find channel '" + args[i] + "'")
@@ -380,7 +380,7 @@ func listChannelsCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Enter at least one team.")
}
- teams := getTeamsFromTeamArgs(args)
+ teams := getTeamsFromTeamArgs(a, args)
for i, team := range teams {
if team == nil {
CommandPrintErrorln("Unable to find team '" + args[i] + "'")
@@ -414,7 +414,7 @@ func restoreChannelsCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Enter at least one channel.")
}
- channels := getChannelsFromChannelArgs(args)
+ channels := getChannelsFromChannelArgs(a, args)
for i, channel := range channels {
if channel == nil {
CommandPrintErrorln("Unable to find channel '" + args[i] + "'")
@@ -445,7 +445,7 @@ func modifyChannelCmdF(cmd *cobra.Command, args []string) error {
return errors.New("You must specify only one of --public or --private")
}
- channel := getChannelFromChannelArg(args[0])
+ channel := getChannelFromChannelArg(a, args[0])
if channel == nil {
return errors.New("Unable to find channel '" + args[0] + "'")
}
diff --git a/cmd/platform/channelargs.go b/cmd/platform/channelargs.go
index 22238dc6a..c12a9cc9a 100644
--- a/cmd/platform/channelargs.go
+++ b/cmd/platform/channelargs.go
@@ -12,10 +12,10 @@ import (
const CHANNEL_ARG_SEPARATOR = ":"
-func getChannelsFromChannelArgs(channelArgs []string) []*model.Channel {
+func getChannelsFromChannelArgs(a *app.App, channelArgs []string) []*model.Channel {
channels := make([]*model.Channel, 0, len(channelArgs))
for _, channelArg := range channelArgs {
- channel := getChannelFromChannelArg(channelArg)
+ channel := getChannelFromChannelArg(a, channelArg)
channels = append(channels, channel)
}
return channels
@@ -29,7 +29,7 @@ func parseChannelArg(channelArg string) (string, string) {
return result[0], result[1]
}
-func getChannelFromChannelArg(channelArg string) *model.Channel {
+func getChannelFromChannelArg(a *app.App, channelArg string) *model.Channel {
teamArg, channelPart := parseChannelArg(channelArg)
if teamArg == "" && channelPart == "" {
return nil
@@ -37,12 +37,12 @@ func getChannelFromChannelArg(channelArg string) *model.Channel {
var channel *model.Channel
if teamArg != "" {
- team := getTeamFromTeamArg(teamArg)
+ team := getTeamFromTeamArg(a, teamArg)
if team == nil {
return nil
}
- if result := <-app.Global().Srv.Store.Channel().GetByNameIncludeDeleted(team.Id, channelPart, true); result.Err == nil {
+ if result := <-a.Srv.Store.Channel().GetByNameIncludeDeleted(team.Id, channelPart, true); result.Err == nil {
channel = result.Data.(*model.Channel)
} else {
fmt.Println(result.Err.Error())
@@ -50,7 +50,7 @@ func getChannelFromChannelArg(channelArg string) *model.Channel {
}
if channel == nil {
- if result := <-app.Global().Srv.Store.Channel().Get(channelPart, true); result.Err == nil {
+ if result := <-a.Srv.Store.Channel().Get(channelPart, true); result.Err == nil {
channel = result.Data.(*model.Channel)
}
}
diff --git a/cmd/platform/import.go b/cmd/platform/import.go
index 85cb3835b..44ada904f 100644
--- a/cmd/platform/import.go
+++ b/cmd/platform/import.go
@@ -53,7 +53,7 @@ func slackImportCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Incorrect number of arguments.")
}
- team := getTeamFromTeamArg(args[0])
+ team := getTeamFromTeamArg(a, args[0])
if team == nil {
return errors.New("Unable to find team '" + args[0] + "'")
}
diff --git a/cmd/platform/jobserver.go b/cmd/platform/jobserver.go
index 944bedeff..24a229552 100644
--- a/cmd/platform/jobserver.go
+++ b/cmd/platform/jobserver.go
@@ -10,7 +10,6 @@ import (
l4g "github.com/alecthomas/log4go"
"github.com/mattermost/mattermost-server/jobs"
"github.com/mattermost/mattermost-server/store"
- "github.com/mattermost/mattermost-server/utils"
"github.com/spf13/cobra"
)
@@ -31,10 +30,13 @@ func jobserverCmdF(cmd *cobra.Command, args []string) {
noSchedule, _ := cmd.Flags().GetBool("noschedule")
// Initialize
- utils.InitAndLoadConfig("config.json")
+ a, err := initDBCommandContext("config.json")
+ if err != nil {
+ panic(err.Error())
+ }
defer l4g.Close()
- jobs.Srv.Store = store.NewLayeredStore()
+ jobs.Srv.Store = store.NewLayeredStore(a.Metrics, a.Cluster)
defer jobs.Srv.Store.Close()
jobs.Srv.LoadLicense()
diff --git a/cmd/platform/roles.go b/cmd/platform/roles.go
index ad64459e5..7939dc5c7 100644
--- a/cmd/platform/roles.go
+++ b/cmd/platform/roles.go
@@ -46,7 +46,7 @@ func makeSystemAdminCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Enter at least one user.")
}
- users := getUsersFromUserArgs(args)
+ users := getUsersFromUserArgs(a, args)
for i, user := range users {
if user == nil {
return errors.New("Unable to find user '" + args[i] + "'")
@@ -70,7 +70,7 @@ func makeMemberCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Enter at least one user.")
}
- users := getUsersFromUserArgs(args)
+ users := getUsersFromUserArgs(a, args)
for i, user := range users {
if user == nil {
return errors.New("Unable to find user '" + args[i] + "'")
diff --git a/cmd/platform/team.go b/cmd/platform/team.go
index 1662bd095..c19f40152 100644
--- a/cmd/platform/team.go
+++ b/cmd/platform/team.go
@@ -112,12 +112,12 @@ func removeUsersCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Not enough arguments.")
}
- team := getTeamFromTeamArg(args[0])
+ team := getTeamFromTeamArg(a, args[0])
if team == nil {
return errors.New("Unable to find team '" + args[0] + "'")
}
- users := getUsersFromUserArgs(args[1:])
+ users := getUsersFromUserArgs(a, args[1:])
for i, user := range users {
removeUserFromTeam(a, team, user, args[i+1])
}
@@ -145,12 +145,12 @@ func addUsersCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Not enough arguments.")
}
- team := getTeamFromTeamArg(args[0])
+ team := getTeamFromTeamArg(a, args[0])
if team == nil {
return errors.New("Unable to find team '" + args[0] + "'")
}
- users := getUsersFromUserArgs(args[1:])
+ users := getUsersFromUserArgs(a, args[1:])
for i, user := range users {
addUserToTeam(a, team, user, args[i+1])
}
@@ -194,7 +194,7 @@ func deleteTeamsCmdF(cmd *cobra.Command, args []string) error {
}
}
- teams := getTeamsFromTeamArgs(args)
+ teams := getTeamsFromTeamArgs(a, args)
for i, team := range teams {
if team == nil {
CommandPrintErrorln("Unable to find team '" + args[i] + "'")
diff --git a/cmd/platform/teamargs.go b/cmd/platform/teamargs.go
index 0083b9e00..144db388b 100644
--- a/cmd/platform/teamargs.go
+++ b/cmd/platform/teamargs.go
@@ -7,23 +7,23 @@ import (
"github.com/mattermost/mattermost-server/model"
)
-func getTeamsFromTeamArgs(teamArgs []string) []*model.Team {
+func getTeamsFromTeamArgs(a *app.App, teamArgs []string) []*model.Team {
teams := make([]*model.Team, 0, len(teamArgs))
for _, teamArg := range teamArgs {
- team := getTeamFromTeamArg(teamArg)
+ team := getTeamFromTeamArg(a, teamArg)
teams = append(teams, team)
}
return teams
}
-func getTeamFromTeamArg(teamArg string) *model.Team {
+func getTeamFromTeamArg(a *app.App, teamArg string) *model.Team {
var team *model.Team
- if result := <-app.Global().Srv.Store.Team().GetByName(teamArg); result.Err == nil {
+ if result := <-a.Srv.Store.Team().GetByName(teamArg); result.Err == nil {
team = result.Data.(*model.Team)
}
if team == nil {
- if result := <-app.Global().Srv.Store.Team().Get(teamArg); result.Err == nil {
+ if result := <-a.Srv.Store.Team().Get(teamArg); result.Err == nil {
team = result.Data.(*model.Team)
}
}
diff --git a/cmd/platform/user.go b/cmd/platform/user.go
index 695e53173..f985aba38 100644
--- a/cmd/platform/user.go
+++ b/cmd/platform/user.go
@@ -171,7 +171,7 @@ func userActivateCmdF(cmd *cobra.Command, args []string) error {
}
func changeUsersActiveStatus(a *app.App, userArgs []string, active bool) {
- users := getUsersFromUserArgs(userArgs)
+ users := getUsersFromUserArgs(a, userArgs)
for i, user := range users {
err := changeUserActiveStatus(a, user, userArgs[i], active)
@@ -255,7 +255,7 @@ func userCreateCmdF(cmd *cobra.Command, args []string) error {
}
func userInviteCmdF(cmd *cobra.Command, args []string) error {
- _, err := initDBCommandContextCobra(cmd)
+ a, err := initDBCommandContextCobra(cmd)
if err != nil {
return err
}
@@ -271,7 +271,7 @@ func userInviteCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Invalid email")
}
- teams := getTeamsFromTeamArgs(args[1:])
+ teams := getTeamsFromTeamArgs(a, args[1:])
for i, team := range teams {
err := inviteUser(email, team, args[i+1])
@@ -305,7 +305,7 @@ func resetUserPasswordCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Expected two arguments. See help text for details.")
}
- user := getUserFromUserArg(args[0])
+ user := getUserFromUserArg(a, args[0])
if user == nil {
return errors.New("Unable to find user '" + args[0] + "'")
}
@@ -328,7 +328,7 @@ func resetUserMfaCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Expected at least one argument. See help text for details.")
}
- users := getUsersFromUserArgs(args)
+ users := getUsersFromUserArgs(a, args)
for i, user := range users {
if user == nil {
@@ -369,7 +369,7 @@ func deleteUserCmdF(cmd *cobra.Command, args []string) error {
}
}
- users := getUsersFromUserArgs(args)
+ users := getUsersFromUserArgs(a, args)
for i, user := range users {
if user == nil {
@@ -472,7 +472,7 @@ func verifyUserCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Expected at least one argument. See help text for details.")
}
- users := getUsersFromUserArgs(args)
+ users := getUsersFromUserArgs(a, args)
for i, user := range users {
if user == nil {
@@ -488,7 +488,7 @@ func verifyUserCmdF(cmd *cobra.Command, args []string) error {
}
func searchUserCmdF(cmd *cobra.Command, args []string) error {
- _, err := initDBCommandContextCobra(cmd)
+ a, err := initDBCommandContextCobra(cmd)
if err != nil {
return err
}
@@ -497,7 +497,7 @@ func searchUserCmdF(cmd *cobra.Command, args []string) error {
return errors.New("Expected at least one argument. See help text for details.")
}
- users := getUsersFromUserArgs(args)
+ users := getUsersFromUserArgs(a, args)
for i, user := range users {
if i > 0 {
diff --git a/cmd/platform/userargs.go b/cmd/platform/userargs.go
index 8fb0147fb..0089cc4da 100644
--- a/cmd/platform/userargs.go
+++ b/cmd/platform/userargs.go
@@ -7,29 +7,29 @@ import (
"github.com/mattermost/mattermost-server/model"
)
-func getUsersFromUserArgs(userArgs []string) []*model.User {
+func getUsersFromUserArgs(a *app.App, userArgs []string) []*model.User {
users := make([]*model.User, 0, len(userArgs))
for _, userArg := range userArgs {
- user := getUserFromUserArg(userArg)
+ user := getUserFromUserArg(a, userArg)
users = append(users, user)
}
return users
}
-func getUserFromUserArg(userArg string) *model.User {
+func getUserFromUserArg(a *app.App, userArg string) *model.User {
var user *model.User
- if result := <-app.Global().Srv.Store.User().GetByEmail(userArg); result.Err == nil {
+ if result := <-a.Srv.Store.User().GetByEmail(userArg); result.Err == nil {
user = result.Data.(*model.User)
}
if user == nil {
- if result := <-app.Global().Srv.Store.User().GetByUsername(userArg); result.Err == nil {
+ if result := <-a.Srv.Store.User().GetByUsername(userArg); result.Err == nil {
user = result.Data.(*model.User)
}
}
if user == nil {
- if result := <-app.Global().Srv.Store.User().Get(userArg); result.Err == nil {
+ if result := <-a.Srv.Store.User().Get(userArg); result.Err == nil {
user = result.Data.(*model.User)
}
}
diff --git a/einterfaces/account_migration.go b/einterfaces/account_migration.go
index 4c76ad712..0db516d75 100644
--- a/einterfaces/account_migration.go
+++ b/einterfaces/account_migration.go
@@ -8,13 +8,3 @@ import "github.com/mattermost/mattermost-server/model"
type AccountMigrationInterface interface {
MigrateToLdap(fromAuthService string, forignUserFieldNameToMatch string, force bool) *model.AppError
}
-
-var theAccountMigrationInterface AccountMigrationInterface
-
-func RegisterAccountMigrationInterface(newInterface AccountMigrationInterface) {
- theAccountMigrationInterface = newInterface
-}
-
-func GetAccountMigrationInterface() AccountMigrationInterface {
- return theAccountMigrationInterface
-}
diff --git a/einterfaces/cluster.go b/einterfaces/cluster.go
index 8b9ef1a2d..b5ef4772a 100644
--- a/einterfaces/cluster.go
+++ b/einterfaces/cluster.go
@@ -23,13 +23,3 @@ type ClusterInterface interface {
GetLogs(page, perPage int) ([]string, *model.AppError)
ConfigChanged(previousConfig *model.Config, newConfig *model.Config, sendToOtherServer bool) *model.AppError
}
-
-var theClusterInterface ClusterInterface
-
-func RegisterClusterInterface(newInterface ClusterInterface) {
- theClusterInterface = newInterface
-}
-
-func GetClusterInterface() ClusterInterface {
- return theClusterInterface
-}
diff --git a/einterfaces/compliance.go b/einterfaces/compliance.go
index 0a624b2dc..14927bee4 100644
--- a/einterfaces/compliance.go
+++ b/einterfaces/compliance.go
@@ -11,13 +11,3 @@ type ComplianceInterface interface {
StartComplianceDailyJob()
RunComplianceJob(job *model.Compliance) *model.AppError
}
-
-var theComplianceInterface ComplianceInterface
-
-func RegisterComplianceInterface(newInterface ComplianceInterface) {
- theComplianceInterface = newInterface
-}
-
-func GetComplianceInterface() ComplianceInterface {
- return theComplianceInterface
-}
diff --git a/einterfaces/ldap.go b/einterfaces/ldap.go
index 929911966..a69f9cbe1 100644
--- a/einterfaces/ldap.go
+++ b/einterfaces/ldap.go
@@ -20,13 +20,3 @@ type LdapInterface interface {
RunTest() *model.AppError
GetAllLdapUsers() ([]*model.User, *model.AppError)
}
-
-var theLdapInterface LdapInterface
-
-func RegisterLdapInterface(newInterface LdapInterface) {
- theLdapInterface = newInterface
-}
-
-func GetLdapInterface() LdapInterface {
- return theLdapInterface
-}
diff --git a/einterfaces/metrics.go b/einterfaces/metrics.go
index e1ef9c15e..58a803067 100644
--- a/einterfaces/metrics.go
+++ b/einterfaces/metrics.go
@@ -38,13 +38,3 @@ type MetricsInterface interface {
AddMemCacheHitCounter(cacheName string, amount float64)
AddMemCacheMissCounter(cacheName string, amount float64)
}
-
-var theMetricsInterface MetricsInterface
-
-func RegisterMetricsInterface(newInterface MetricsInterface) {
- theMetricsInterface = newInterface
-}
-
-func GetMetricsInterface() MetricsInterface {
- return theMetricsInterface
-}
diff --git a/einterfaces/mfa.go b/einterfaces/mfa.go
index eb31fb914..3afe961e3 100644
--- a/einterfaces/mfa.go
+++ b/einterfaces/mfa.go
@@ -13,13 +13,3 @@ type MfaInterface interface {
Deactivate(userId string) *model.AppError
ValidateToken(secret, token string) (bool, *model.AppError)
}
-
-var theMfaInterface MfaInterface
-
-func RegisterMfaInterface(newInterface MfaInterface) {
- theMfaInterface = newInterface
-}
-
-func GetMfaInterface() MfaInterface {
- return theMfaInterface
-}
diff --git a/einterfaces/saml.go b/einterfaces/saml.go
index df9207d67..833a3d43f 100644
--- a/einterfaces/saml.go
+++ b/einterfaces/saml.go
@@ -13,13 +13,3 @@ type SamlInterface interface {
DoLogin(encodedXML string, relayState map[string]string) (*model.User, *model.AppError)
GetMetadata() (string, *model.AppError)
}
-
-var theSamlInterface SamlInterface
-
-func RegisterSamlInterface(newInterface SamlInterface) {
- theSamlInterface = newInterface
-}
-
-func GetSamlInterface() SamlInterface {
- return theSamlInterface
-}
diff --git a/store/layered_store.go b/store/layered_store.go
index 0c6a01125..64107288c 100644
--- a/store/layered_store.go
+++ b/store/layered_store.go
@@ -24,11 +24,11 @@ type LayeredStore struct {
LayerChainHead LayeredStoreSupplier
}
-func NewLayeredStore() Store {
+func NewLayeredStore(metrics einterfaces.MetricsInterface, cluster einterfaces.ClusterInterface) Store {
store := &LayeredStore{
TmpContext: context.TODO(),
- DatabaseLayer: NewSqlSupplier(einterfaces.GetMetricsInterface()),
- LocalCacheLayer: NewLocalCacheSupplier(einterfaces.GetMetricsInterface(), einterfaces.GetClusterInterface()),
+ DatabaseLayer: NewSqlSupplier(metrics),
+ LocalCacheLayer: NewLocalCacheSupplier(metrics, cluster),
}
store.ReactionStore = &LayeredReactionStore{store}
diff --git a/store/local_cache_supplier.go b/store/local_cache_supplier.go
index 91aa94768..3627c5b39 100644
--- a/store/local_cache_supplier.go
+++ b/store/local_cache_supplier.go
@@ -32,15 +32,11 @@ func NewLocalCacheSupplier(metrics einterfaces.MetricsInterface, cluster einterf
cluster: cluster,
}
- registerClusterHandlers(supplier)
-
- return supplier
-}
-
-func registerClusterHandlers(supplier *LocalCacheSupplier) {
- if cluster := einterfaces.GetClusterInterface(); cluster != nil {
+ if cluster != nil {
cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_REACTIONS, supplier.handleClusterInvalidateReaction)
}
+
+ return supplier
}
func (s *LocalCacheSupplier) SetChainNext(next LayeredStoreSupplier) {
diff --git a/store/sql_store_test.go b/store/sql_store_test.go
index ac77357c4..4be3352e9 100644
--- a/store/sql_store_test.go
+++ b/store/sql_store_test.go
@@ -12,7 +12,7 @@ func Setup() {
utils.TranslationsPreInit()
utils.LoadConfig("config.json")
utils.InitTranslations(utils.Cfg.LocalizationSettings)
- store = NewLayeredStore()
+ store = NewLayeredStore(nil, nil)
store.MarkSystemRanUnitTests()
}
diff --git a/utils/config.go b/utils/config.go
index dff4efd6e..c4ffbc8e0 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -373,10 +373,6 @@ func LoadConfig(fileName string) {
cfgMutex.Lock()
}
- if err := ValidateLdapFilter(&config); err != nil {
- panic(T(err.Id))
- }
-
configureLog(&config.LogSettings)
if *config.FileSettings.DriverName == model.IMAGE_DRIVER_LOCAL {
@@ -392,16 +388,6 @@ func LoadConfig(fileName string) {
clientCfgJson, _ := json.Marshal(ClientCfg)
ClientCfgHash = fmt.Sprintf("%x", md5.Sum(clientCfgJson))
- // Actions that need to run every time the config is loaded
- if ldapI := einterfaces.GetLdapInterface(); ldapI != nil {
- // This restarts the job if nessisary (works for config reloads)
- ldapI.StartLdapSyncJob()
- }
-
- if samlI := einterfaces.GetSamlInterface(); samlI != nil {
- samlI.ConfigureSP()
- }
-
SetDefaultRolesBasedOnConfig()
SetSiteURL(*Cfg.ServiceSettings.SiteURL)
@@ -597,10 +583,9 @@ func getClientConfig(c *model.Config) map[string]string {
return props
}
-func ValidateLdapFilter(cfg *model.Config) *model.AppError {
- ldapInterface := einterfaces.GetLdapInterface()
- if *cfg.LdapSettings.Enable && ldapInterface != nil && *cfg.LdapSettings.UserFilter != "" {
- if err := ldapInterface.ValidateFilter(*cfg.LdapSettings.UserFilter); err != nil {
+func ValidateLdapFilter(cfg *model.Config, ldap einterfaces.LdapInterface) *model.AppError {
+ if *cfg.LdapSettings.Enable && ldap != nil && *cfg.LdapSettings.UserFilter != "" {
+ if err := ldap.ValidateFilter(*cfg.LdapSettings.UserFilter); err != nil {
return err
}
}