summaryrefslogtreecommitdiffstats
path: root/app/admin.go
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-01-25 09:32:42 -0500
committerHarrison Healey <harrisonmhealey@gmail.com>2017-01-25 09:32:42 -0500
commitd245b29f82a03f1aff966a2fb2100a5703d82f32 (patch)
treecf204039af74fa2579e0291e9e595f08411b0a7a /app/admin.go
parent8ed665cb76c0763e83a2949c4bdd70153baf72f7 (diff)
downloadchat-d245b29f82a03f1aff966a2fb2100a5703d82f32.tar.gz
chat-d245b29f82a03f1aff966a2fb2100a5703d82f32.tar.bz2
chat-d245b29f82a03f1aff966a2fb2100a5703d82f32.zip
More app code migration (#5170)
* Migrate admin functions into app package * More user function refactoring * Move post functions into app package
Diffstat (limited to 'app/admin.go')
-rw-r--r--app/admin.go182
1 files changed, 182 insertions, 0 deletions
diff --git a/app/admin.go b/app/admin.go
new file mode 100644
index 000000000..c694285fa
--- /dev/null
+++ b/app/admin.go
@@ -0,0 +1,182 @@
+// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package app
+
+import (
+ "bufio"
+ "os"
+ "strings"
+ "time"
+
+ "runtime/debug"
+
+ l4g "github.com/alecthomas/log4go"
+ "github.com/mattermost/platform/einterfaces"
+ "github.com/mattermost/platform/model"
+ "github.com/mattermost/platform/store"
+ "github.com/mattermost/platform/utils"
+)
+
+func GetLogs() ([]string, *model.AppError) {
+ var lines []string
+
+ if utils.Cfg.LogSettings.EnableFile {
+ file, err := os.Open(utils.GetLogFileLocation(utils.Cfg.LogSettings.FileLocation))
+ if err != nil {
+ return nil, model.NewLocAppError("getLogs", "api.admin.file_read_error", nil, err.Error())
+ }
+
+ defer file.Close()
+
+ scanner := bufio.NewScanner(file)
+ for scanner.Scan() {
+ lines = append(lines, scanner.Text())
+ }
+ } else {
+ lines = append(lines, "")
+ }
+
+ if einterfaces.GetClusterInterface() != nil {
+ clines, err := einterfaces.GetClusterInterface().GetLogs()
+ if err != nil {
+ return nil, err
+ }
+
+ lines = append(lines, clines...)
+ }
+
+ return lines, nil
+}
+
+func GetClusterStatus() []*model.ClusterInfo {
+ infos := make([]*model.ClusterInfo, 0)
+
+ if einterfaces.GetClusterInterface() != nil {
+ infos = einterfaces.GetClusterInterface().GetClusterInfos()
+ }
+
+ return infos
+}
+
+func InvalidateAllCaches() *model.AppError {
+ debug.FreeOSMemory()
+ InvalidateAllCachesSkipSend()
+
+ if einterfaces.GetClusterInterface() != nil {
+ err := einterfaces.GetClusterInterface().InvalidateAllCaches()
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func InvalidateAllCachesSkipSend() {
+ l4g.Info(utils.T("api.context.invalidate_all_caches"))
+ sessionCache.Purge()
+ ClearStatusCache()
+ store.ClearChannelCaches()
+ store.ClearUserCaches()
+ store.ClearPostCaches()
+}
+
+func GetConfig() *model.Config {
+ json := utils.Cfg.ToJson()
+ cfg := model.ConfigFromJson(strings.NewReader(json))
+ cfg.Sanitize()
+
+ return cfg
+}
+
+func ReloadConfig() {
+ debug.FreeOSMemory()
+ utils.LoadConfig(utils.CfgFileName)
+
+ // start/restart email batching job if necessary
+ InitEmailBatching()
+}
+
+func SaveConfig(cfg *model.Config) *model.AppError {
+ cfg.SetDefaults()
+ utils.Desanitize(cfg)
+
+ if err := cfg.IsValid(); err != nil {
+ return err
+ }
+
+ if err := utils.ValidateLdapFilter(cfg); err != nil {
+ return err
+ }
+
+ if *utils.Cfg.ClusterSettings.Enable {
+ return model.NewLocAppError("saveConfig", "ent.cluster.save_config.error", nil, "")
+ }
+
+ //oldCfg := utils.Cfg
+ utils.SaveConfig(utils.CfgFileName, cfg)
+ utils.LoadConfig(utils.CfgFileName)
+
+ if einterfaces.GetMetricsInterface() != nil {
+ if *utils.Cfg.MetricsSettings.Enable {
+ einterfaces.GetMetricsInterface().StartServer()
+ } else {
+ einterfaces.GetMetricsInterface().StopServer()
+ }
+ }
+
+ // Future feature is to sync the configuration files
+ // if einterfaces.GetClusterInterface() != nil {
+ // err := einterfaces.GetClusterInterface().ConfigChanged(cfg, oldCfg, true)
+ // if err != nil {
+ // return err
+ // }
+ // }
+
+ // start/restart email batching job if necessary
+ InitEmailBatching()
+
+ return nil
+}
+
+func RecycleDatabaseConnection() {
+ oldStore := Srv.Store
+
+ l4g.Warn(utils.T("api.admin.recycle_db_start.warn"))
+ Srv.Store = store.NewSqlStore()
+
+ time.Sleep(20 * time.Second)
+ oldStore.Close()
+
+ l4g.Warn(utils.T("api.admin.recycle_db_end.warn"))
+}
+
+func TestEmail(userId string, cfg *model.Config) *model.AppError {
+ if len(cfg.EmailSettings.SMTPServer) == 0 {
+ return model.NewLocAppError("testEmail", "api.admin.test_email.missing_server", nil, utils.T("api.context.invalid_param.app_error", map[string]interface{}{"Name": "SMTPServer"}))
+ }
+
+ // if the user hasn't changed their email settings, fill in the actual SMTP password so that
+ // the user can verify an existing SMTP connection
+ if cfg.EmailSettings.SMTPPassword == model.FAKE_SETTING {
+ if cfg.EmailSettings.SMTPServer == utils.Cfg.EmailSettings.SMTPServer &&
+ cfg.EmailSettings.SMTPPort == utils.Cfg.EmailSettings.SMTPPort &&
+ cfg.EmailSettings.SMTPUsername == utils.Cfg.EmailSettings.SMTPUsername {
+ cfg.EmailSettings.SMTPPassword = utils.Cfg.EmailSettings.SMTPPassword
+ } else {
+ return model.NewLocAppError("testEmail", "api.admin.test_email.reenter_password", nil, "")
+ }
+ }
+
+ if user, err := GetUser(userId); err != nil {
+ return err
+ } else {
+ T := utils.GetUserTranslations(user.Locale)
+ if err := utils.SendMailUsingConfig(user.Email, T("api.admin.test_email.subject"), T("api.admin.test_email.body"), cfg); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}