Этот коммит содержится в:
Chris
2017-09-21 04:13:34 -05:00
коммит произвёл George Goldberg
родитель adab1a660f
Коммит 266ff86702
28 изменённых файлов: 179 добавлений и 190 удалений

Просмотреть файл

@@ -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)

Просмотреть файл

@@ -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)
}
}

Просмотреть файл

@@ -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)

Просмотреть файл

@@ -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

Просмотреть файл

@@ -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)

Просмотреть файл

@@ -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:

Просмотреть файл

@@ -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()

Просмотреть файл

@@ -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{}

Просмотреть файл

@@ -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] + "'")
}

Просмотреть файл

@@ -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)
}
}

Просмотреть файл

@@ -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] + "'")
}

Просмотреть файл

@@ -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()

Просмотреть файл

@@ -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] + "'")

Просмотреть файл

@@ -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] + "'")

Просмотреть файл

@@ -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)
}
}

Просмотреть файл

@@ -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 {

Просмотреть файл

@@ -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)
}
}

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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}

Просмотреть файл

@@ -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) {

Просмотреть файл

@@ -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()
}

Просмотреть файл

@@ -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
}
}