Merge branch 'master' of github.com:mattermost/mattermost-server into MM-47853-true-up-review-telemetry-off-non-air-gapped

Этот коммит содержится в:
Conor Macpherson
2023-01-03 13:54:38 -05:00
родитель e31a6a47b0 c8e70718c2
Коммит 40724ae44d
23 изменённых файлов: 111 добавлений и 131 удалений

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

@@ -8,7 +8,6 @@ import (
"encoding/json"
"fmt"
"net/http"
"os"
"sort"
"strings"
"sync"
@@ -4584,8 +4583,6 @@ func TestViewChannelWithoutCollapsedThreads(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn

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

@@ -124,7 +124,6 @@ func deleteDraft(c *Context, w http.ResponseWriter, r *http.Request) {
switch {
case err.StatusCode == http.StatusNotFound:
// If the draft doesn't exist in the server, we don't need to delete.
mlog.Debug("Unable to find the draft", mlog.Err(err))
ReturnStatusOK(w)
default:
c.Err = err

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

@@ -12,7 +12,6 @@ import (
"net/http"
"net/http/httptest"
"net/url"
"os"
"reflect"
"sort"
"strings"
@@ -2954,8 +2953,6 @@ func TestSetChannelUnread(t *testing.T) {
}
func TestSetPostUnreadWithoutCollapsedThreads(t *testing.T) {
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th := Setup(t).InitBasic()
defer th.TearDown()
th.App.UpdateConfig(func(cfg *model.Config) {

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

@@ -2017,9 +2017,15 @@ func loginCWS(c *Context, w http.ResponseWriter, r *http.Request) {
redirectURL := *c.App.Config().ServiceSettings.SiteURL
if campaign != "" {
if url, ok := campaignToURL[campaign]; ok {
properties := map[string]any{
"category": "acquisition",
"redirect_to": strings.TrimSuffix(url, "/"),
}
c.App.Srv().GetTelemetryService().SendTelemetry("product_start_redirect", properties)
redirectURL += url
}
}
http.Redirect(w, r, redirectURL, http.StatusFound)
}

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

@@ -5794,8 +5794,6 @@ func TestUpdatePassword(t *testing.T) {
func TestGetThreadsForUser(t *testing.T) {
os.Setenv("MM_FEATUREFLAGS_POSTPRIORITY", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_POSTPRIORITY")
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th := Setup(t).InitBasic()
defer th.TearDown()
@@ -6151,8 +6149,6 @@ func TestGetThreadsForUser(t *testing.T) {
func TestThreadSocketEvents(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.ConfigStore.SetReadOnlyFF(false)
defer th.ConfigStore.SetReadOnlyFF(true)
@@ -6533,8 +6529,6 @@ func TestMaintainUnreadRepliesInThread(t *testing.T) {
defer th.UnlinkUserFromTeam(th.SystemAdminUser, th.BasicTeam)
th.AddUserToChannel(th.SystemAdminUser, th.BasicChannel)
defer th.RemoveUserFromChannel(th.SystemAdminUser, th.BasicChannel)
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
@@ -6590,8 +6584,7 @@ func TestMaintainUnreadRepliesInThread(t *testing.T) {
func TestThreadCounts(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
@@ -6633,8 +6626,6 @@ func TestThreadCounts(t *testing.T) {
func TestSingleThreadGet(t *testing.T) {
os.Setenv("MM_FEATUREFLAGS_POSTPRIORITY", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_POSTPRIORITY")
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th := Setup(t).InitBasic()
defer th.TearDown()
@@ -6704,8 +6695,7 @@ func TestMaintainUnreadMentionsInThread(t *testing.T) {
th.AddUserToChannel(th.SystemAdminUser, th.BasicChannel)
defer th.RemoveUserFromChannel(th.SystemAdminUser, th.BasicChannel)
client := th.Client
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
@@ -6768,8 +6758,7 @@ func TestMaintainUnreadMentionsInThread(t *testing.T) {
func TestReadThreads(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
@@ -6872,8 +6861,7 @@ func TestReadThreads(t *testing.T) {
func TestMarkThreadUnreadMentionCount(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn

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

@@ -8,7 +8,6 @@ import (
"errors"
"fmt"
"net/http"
"os"
"sort"
"strings"
"sync"
@@ -2127,8 +2126,7 @@ func TestViewChannelCollapsedThreadsTurnedOff(t *testing.T) {
th.AddUserToChannel(u2, c1)
// Enable CRT
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
@@ -2198,8 +2196,6 @@ func TestViewChannelCollapsedThreadsTurnedOff(t *testing.T) {
func TestMarkChannelAsUnreadFromPostCollapsedThreadsTurnedOff(t *testing.T) {
// Enable CRT
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th := Setup(t).InitBasic()
defer th.TearDown()
@@ -2286,8 +2282,7 @@ func TestMarkChannelAsUnreadFromPostCollapsedThreadsTurnedOff(t *testing.T) {
}
func TestMarkUnreadCRTOffUpdatesThreads(t *testing.T) {
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th := Setup(t).InitBasic()
defer th.TearDown()
th.App.UpdateConfig(func(cfg *model.Config) {

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

@@ -46,7 +46,7 @@ func (s *Server) doAdvancedPermissionsMigration() {
// If this failed for reasons other than the role already existing, don't mark the migration as done.
fetchedRole, err := s.Store().Role().GetByName(context.Background(), role.Name)
if err != nil {
mlog.Critical("Failed to migrate role to database.", mlog.Err(err))
mlog.Fatal("Failed to migrate role to database.", mlog.Err(err))
allSucceeded = false
continue
}
@@ -59,7 +59,7 @@ func (s *Server) doAdvancedPermissionsMigration() {
role.Id = fetchedRole.Id
if _, err = s.Store().Role().Save(role); err != nil {
// Role is not the same, but failed to update.
mlog.Critical("Failed to migrate role to database.", mlog.Err(err))
mlog.Fatal("Failed to migrate role to database.", mlog.Err(err))
allSucceeded = false
}
}
@@ -81,7 +81,7 @@ func (s *Server) doAdvancedPermissionsMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark advanced permissions migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark advanced permissions migration as completed.", mlog.Err(err))
}
}
@@ -114,21 +114,21 @@ func (s *Server) doEmojisPermissionsMigration() {
// Emoji creation is set to all by default
role, err = s.GetRoleByName(context.Background(), model.SystemUserRoleId)
if err != nil {
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
mlog.Fatal("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
return
}
if role != nil {
role.Permissions = append(role.Permissions, model.PermissionCreateEmojis.Id, model.PermissionDeleteEmojis.Id)
if _, nErr := s.Store().Role().Save(role); nErr != nil {
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(nErr))
mlog.Fatal("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(nErr))
return
}
}
systemAdminRole, err = s.GetRoleByName(context.Background(), model.SystemAdminRoleId)
if err != nil {
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
mlog.Fatal("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
return
}
@@ -138,7 +138,7 @@ func (s *Server) doEmojisPermissionsMigration() {
model.PermissionDeleteOthersEmojis.Id,
)
if _, err := s.Store().Role().Save(systemAdminRole); err != nil {
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
mlog.Fatal("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
return
}
@@ -148,7 +148,7 @@ func (s *Server) doEmojisPermissionsMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark emojis permissions migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark emojis permissions migration as completed.", mlog.Err(err))
}
}
@@ -167,26 +167,26 @@ func (s *Server) doGuestRolesCreationMigration() {
allSucceeded := true
if _, err := s.Store().Role().GetByName(context.Background(), model.ChannelGuestRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.ChannelGuestRoleId]); err != nil {
mlog.Critical("Failed to create new guest role to database.", mlog.Err(err))
mlog.Fatal("Failed to create new guest role to database.", mlog.Err(err))
allSucceeded = false
}
}
if _, err := s.Store().Role().GetByName(context.Background(), model.TeamGuestRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.TeamGuestRoleId]); err != nil {
mlog.Critical("Failed to create new guest role to database.", mlog.Err(err))
mlog.Fatal("Failed to create new guest role to database.", mlog.Err(err))
allSucceeded = false
}
}
if _, err := s.Store().Role().GetByName(context.Background(), model.SystemGuestRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.SystemGuestRoleId]); err != nil {
mlog.Critical("Failed to create new guest role to database.", mlog.Err(err))
mlog.Fatal("Failed to create new guest role to database.", mlog.Err(err))
allSucceeded = false
}
}
schemes, err := s.Store().Scheme().GetAllPage("", 0, 1000000)
if err != nil {
mlog.Critical("Failed to get all schemes.", mlog.Err(err))
mlog.Fatal("Failed to get all schemes.", mlog.Err(err))
allSucceeded = false
}
for _, scheme := range schemes {
@@ -201,7 +201,7 @@ func (s *Server) doGuestRolesCreationMigration() {
}
if savedRole, err := s.Store().Role().Save(teamGuestRole); err != nil {
mlog.Critical("Failed to create new guest role for custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to create new guest role for custom scheme.", mlog.Err(err))
allSucceeded = false
} else {
scheme.DefaultTeamGuestRole = savedRole.Name
@@ -217,7 +217,7 @@ func (s *Server) doGuestRolesCreationMigration() {
}
if savedRole, err := s.Store().Role().Save(channelGuestRole); err != nil {
mlog.Critical("Failed to create new guest role for custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to create new guest role for custom scheme.", mlog.Err(err))
allSucceeded = false
} else {
scheme.DefaultChannelGuestRole = savedRole.Name
@@ -225,7 +225,7 @@ func (s *Server) doGuestRolesCreationMigration() {
_, err := s.Store().Scheme().Save(scheme)
if err != nil {
mlog.Critical("Failed to update custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to update custom scheme.", mlog.Err(err))
allSucceeded = false
}
}
@@ -241,7 +241,7 @@ func (s *Server) doGuestRolesCreationMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark guest roles creation migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark guest roles creation migration as completed.", mlog.Err(err))
}
}
@@ -260,19 +260,19 @@ func (s *Server) doSystemConsoleRolesCreationMigration() {
allSucceeded := true
if _, err := s.Store().Role().GetByName(context.Background(), model.SystemManagerRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.SystemManagerRoleId]); err != nil {
mlog.Critical("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemManagerRoleId))
mlog.Fatal("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemManagerRoleId))
allSucceeded = false
}
}
if _, err := s.Store().Role().GetByName(context.Background(), model.SystemReadOnlyAdminRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.SystemReadOnlyAdminRoleId]); err != nil {
mlog.Critical("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemReadOnlyAdminRoleId))
mlog.Fatal("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemReadOnlyAdminRoleId))
allSucceeded = false
}
}
if _, err := s.Store().Role().GetByName(context.Background(), model.SystemUserManagerRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.SystemUserManagerRoleId]); err != nil {
mlog.Critical("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemUserManagerRoleId))
mlog.Fatal("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemUserManagerRoleId))
allSucceeded = false
}
}
@@ -287,7 +287,7 @@ func (s *Server) doSystemConsoleRolesCreationMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark system console roles creation migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark system console roles creation migration as completed.", mlog.Err(err))
}
}
@@ -302,7 +302,7 @@ func (s *Server) doCustomGroupAdminRoleCreationMigration() {
allSucceeded := true
if _, err := s.Store().Role().GetByName(context.Background(), model.SystemCustomGroupAdminRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.SystemCustomGroupAdminRoleId]); err != nil {
mlog.Critical("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemCustomGroupAdminRoleId))
mlog.Fatal("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SystemCustomGroupAdminRoleId))
allSucceeded = false
}
}
@@ -317,7 +317,7 @@ func (s *Server) doCustomGroupAdminRoleCreationMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark custom group admin role creation migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark custom group admin role creation migration as completed.", mlog.Err(err))
}
}
@@ -337,7 +337,7 @@ func (s *Server) doContentExtractionConfigDefaultTrueMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark content extraction config migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark content extraction config migration as completed.", mlog.Err(err))
}
}
@@ -352,31 +352,31 @@ func (s *Server) doPlaybooksRolesCreationMigration() {
allSucceeded := true
if _, err := s.Store().Role().GetByName(context.Background(), model.PlaybookAdminRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.PlaybookAdminRoleId]); err != nil {
mlog.Critical("Failed to create new playbook admin role to database.", mlog.Err(err))
mlog.Fatal("Failed to create new playbook admin role to database.", mlog.Err(err))
allSucceeded = false
}
}
if _, err := s.Store().Role().GetByName(context.Background(), model.PlaybookMemberRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.PlaybookMemberRoleId]); err != nil {
mlog.Critical("Failed to create new playbook member role to database.", mlog.Err(err))
mlog.Fatal("Failed to create new playbook member role to database.", mlog.Err(err))
allSucceeded = false
}
}
if _, err := s.Store().Role().GetByName(context.Background(), model.RunAdminRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.RunAdminRoleId]); err != nil {
mlog.Critical("Failed to create new run admin role to database.", mlog.Err(err))
mlog.Fatal("Failed to create new run admin role to database.", mlog.Err(err))
allSucceeded = false
}
}
if _, err := s.Store().Role().GetByName(context.Background(), model.RunMemberRoleId); err != nil {
if _, err := s.Store().Role().Save(roles[model.RunMemberRoleId]); err != nil {
mlog.Critical("Failed to create new run member role to database.", mlog.Err(err))
mlog.Fatal("Failed to create new run member role to database.", mlog.Err(err))
allSucceeded = false
}
}
schemes, err := s.Store().Scheme().GetAllPage(model.SchemeScopeTeam, 0, 1000000)
if err != nil {
mlog.Critical("Failed to get all schemes.", mlog.Err(err))
mlog.Fatal("Failed to get all schemes.", mlog.Err(err))
allSucceeded = false
}
@@ -391,7 +391,7 @@ func (s *Server) doPlaybooksRolesCreationMigration() {
}
if savedRole, err := s.Store().Role().Save(playbookAdminRole); err != nil {
mlog.Critical("Failed to create new playbook admin role for existing custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to create new playbook admin role for existing custom scheme.", mlog.Err(err))
allSucceeded = false
} else {
scheme.DefaultPlaybookAdminRole = savedRole.Name
@@ -406,7 +406,7 @@ func (s *Server) doPlaybooksRolesCreationMigration() {
}
if savedRole, err := s.Store().Role().Save(playbookMember); err != nil {
mlog.Critical("Failed to create new playbook member role for existing custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to create new playbook member role for existing custom scheme.", mlog.Err(err))
allSucceeded = false
} else {
scheme.DefaultPlaybookMemberRole = savedRole.Name
@@ -422,7 +422,7 @@ func (s *Server) doPlaybooksRolesCreationMigration() {
}
if savedRole, err := s.Store().Role().Save(runAdminRole); err != nil {
mlog.Critical("Failed to create new run admin role for existing custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to create new run admin role for existing custom scheme.", mlog.Err(err))
allSucceeded = false
} else {
scheme.DefaultRunAdminRole = savedRole.Name
@@ -438,7 +438,7 @@ func (s *Server) doPlaybooksRolesCreationMigration() {
}
if savedRole, err := s.Store().Role().Save(runMemberRole); err != nil {
mlog.Critical("Failed to create new run member role for existing custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to create new run member role for existing custom scheme.", mlog.Err(err))
allSucceeded = false
} else {
scheme.DefaultRunMemberRole = savedRole.Name
@@ -446,7 +446,7 @@ func (s *Server) doPlaybooksRolesCreationMigration() {
}
_, err := s.Store().Scheme().Save(scheme)
if err != nil {
mlog.Critical("Failed to update custom scheme.", mlog.Err(err))
mlog.Fatal("Failed to update custom scheme.", mlog.Err(err))
allSucceeded = false
}
}
@@ -462,7 +462,7 @@ func (s *Server) doPlaybooksRolesCreationMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark playbook roles creation migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark playbook roles creation migration as completed.", mlog.Err(err))
}
}
@@ -507,7 +507,7 @@ func (s *Server) doFirstAdminSetupCompleteMigration() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark first admin setup migration as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark first admin setup migration as completed.", mlog.Err(err))
}
}
@@ -534,7 +534,7 @@ func (s *Server) doRemainingSchemaMigrations() {
}
if err := s.Store().System().Save(&system); err != nil {
mlog.Critical("Failed to mark the remaining schema migrations as completed.", mlog.Err(err))
mlog.Fatal("Failed to mark the remaining schema migrations as completed.", mlog.Err(err))
}
}
@@ -552,7 +552,7 @@ func (s *Server) doAppMigrations() {
// migrations. For example, it needs the guest roles migration.
err := s.doPermissionsMigrations()
if err != nil {
mlog.Critical("(app.App).DoPermissionsMigrations failed", mlog.Err(err))
mlog.Fatal("(app.App).DoPermissionsMigrations failed", mlog.Err(err))
}
s.doContentExtractionConfigDefaultTrueMigration()
s.doPlaybooksRolesCreationMigration()

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

@@ -43,7 +43,7 @@ func (a *App) SendNotifications(c request.CTX, post *model.Post, team *model.Tea
return []string{}, nil
}
isCRTAllowed := a.Config().FeatureFlags.CollapsedThreads && *a.Config().ServiceSettings.CollapsedThreads != model.CollapsedThreadsDisabled
isCRTAllowed := *a.Config().ServiceSettings.CollapsedThreads != model.CollapsedThreadsDisabled
pchan := make(chan store.StoreResult, 1)
go func() {

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

@@ -5,7 +5,6 @@ package app
import (
"fmt"
"os"
"testing"
"github.com/stretchr/testify/assert"
@@ -2734,8 +2733,7 @@ func TestReplyPostNotificationsWithCRT(t *testing.T) {
}()
// Enable CRT
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn

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

@@ -111,7 +111,7 @@ func (pm *platformMetrics) startMetricsServer() error {
go func() {
close(notify)
if err := pm.server.Serve(l); err != nil && err != http.ErrServerClosed {
pm.logger.Critical(err.Error())
pm.logger.Fatal(err.Error())
}
}()

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

@@ -402,6 +402,8 @@ func (ch *Channels) installExtractedPlugin(manifest *model.Manifest, fromPluginD
manifest = updatedManifest
}
mlog.Debug("Installing plugin", mlog.String("plugin_id", manifest.Id), mlog.String("version", manifest.Version))
return manifest, nil
}

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

@@ -2357,8 +2357,6 @@ func TestThreadMembership(t *testing.T) {
func TestFollowThreadSkipsParticipants(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
@@ -2410,13 +2408,16 @@ func TestFollowThreadSkipsParticipants(t *testing.T) {
for _, p := range thread.Participants {
require.True(t, p.Id == sysadmin.Id || p.Id == user.Id)
}
threadMembership.PostId = "notfound"
_, err = th.App.GetThreadForUser(threadMembership, false)
require.NotNil(t, err)
assert.Equal(t, http.StatusNotFound, err.StatusCode)
}
func TestAutofollowBasedOnRootPost(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
@@ -2445,8 +2446,6 @@ func TestAutofollowBasedOnRootPost(t *testing.T) {
func TestViewChannelShouldNotUpdateThreads(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
@@ -2528,12 +2527,6 @@ func TestCollapsedThreadFetch(t *testing.T) {
})
t.Run("Should not panic on unexpected db error", func(t *testing.T) {
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
cfg.FeatureFlags.CollapsedThreads = true
})
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
defer th.App.DeleteChannel(th.Context, channel, user1.Id)
@@ -2765,8 +2758,6 @@ func TestSharedChannelSyncForPostActions(t *testing.T) {
func TestAutofollowOnPostingAfterUnfollow(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true
@@ -2834,8 +2825,6 @@ func TestGetPostIfAuthorized(t *testing.T) {
func TestShouldNotRefollowOnOthersReply(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.ThreadAutoFollow = true

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

@@ -1060,7 +1060,7 @@ func (s *Server) Start() error {
}
if err != nil && err != http.ErrServerClosed {
mlog.Critical("Error starting server", mlog.Err(err))
mlog.Fatal("Error starting server", mlog.Err(err))
time.Sleep(time.Second)
}
@@ -1069,7 +1069,7 @@ func (s *Server) Start() error {
if *s.platform.Config().ServiceSettings.EnableLocalMode {
if err := s.startLocalModeServer(); err != nil {
mlog.Critical(err.Error())
mlog.Fatal(err.Error())
}
}
@@ -1101,7 +1101,7 @@ func (s *Server) startLocalModeServer() error {
go func() {
err = s.localModeServer.Serve(unixListener)
if err != nil && err != http.ErrServerClosed {
mlog.Critical("Error starting unix socket server", mlog.Err(err))
mlog.Fatal("Error starting unix socket server", mlog.Err(err))
}
}()
return nil

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

@@ -2484,24 +2484,31 @@ func (a *App) GetThreadsForUser(userID, teamID string, options model.GetUserThre
}
func (a *App) GetThreadMembershipForUser(userId, threadId string) (*model.ThreadMembership, *model.AppError) {
threadMembership, err := a.Srv().Store().Thread().GetMembershipForUser(userId, threadId)
if err != nil {
return nil, model.NewAppError("GetThreadMembershipForUser", "app.user.get_thread_membership_for_user.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
}
if threadMembership == nil {
return nil, model.NewAppError("GetThreadMembershipForUser", "app.user.get_thread_membership_for_user.not_found", nil, "thread membership not found/followed", http.StatusNotFound)
threadMembership, nErr := a.Srv().Store().Thread().GetMembershipForUser(userId, threadId)
if nErr != nil {
var nfErr *store.ErrNotFound
switch {
case errors.As(nErr, &nfErr):
return nil, model.NewAppError("GetThreadMembershipForUser", "app.user.get_thread_membership_for_user.not_found", nil, "", http.StatusNotFound).Wrap(nErr)
default:
return nil, model.NewAppError("GetThreadMembershipForUser", "app.user.get_thread_membership_for_user.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr)
}
}
return threadMembership, nil
}
func (a *App) GetThreadForUser(threadMembership *model.ThreadMembership, extended bool) (*model.ThreadResponse, *model.AppError) {
thread, err := a.Srv().Store().Thread().GetThreadForUser(threadMembership, extended, a.isPostPriorityEnabled())
if err != nil {
return nil, model.NewAppError("GetThreadForUser", "app.user.get_threads_for_user.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
}
if thread == nil {
return nil, model.NewAppError("GetThreadForUser", "app.user.get_threads_for_user.not_found", nil, "thread not found/followed", http.StatusNotFound)
thread, nErr := a.Srv().Store().Thread().GetThreadForUser(threadMembership, extended, a.isPostPriorityEnabled())
if nErr != nil {
var nfErr *store.ErrNotFound
switch {
case errors.As(nErr, &nfErr):
return nil, model.NewAppError("GetThreadForUser", "app.user.get_threads_for_user.not_found", nil, "thread not found/followed", http.StatusNotFound)
default:
return nil, model.NewAppError("GetThreadForUser", "app.user.get_threads_for_user.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr)
}
}
a.sanitizeProfiles(thread.Participants, false)
thread.Post.SanitizeProps()
return thread, nil

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

@@ -8,7 +8,7 @@ import (
"context"
"encoding/json"
"errors"
"os"
"net/http"
"path/filepath"
"strings"
"testing"
@@ -1673,8 +1673,6 @@ func TestPatchUser(t *testing.T) {
}
func TestUpdateThreadReadForUser(t *testing.T) {
os.Setenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
t.Run("Ensure thread membership is created and followed", func(t *testing.T) {
th := Setup(t).InitBasic()
@@ -1703,6 +1701,10 @@ func TestUpdateThreadReadForUser(t *testing.T) {
require.Nil(t, appErr)
require.NotNil(t, threadMembership)
assert.True(t, threadMembership.Following)
_, appErr = th.App.GetThreadMembershipForUser(th.BasicUser.Id, "notfound")
require.NotNil(t, appErr)
assert.Equal(t, http.StatusNotFound, appErr.StatusCode)
})
t.Run("Ensure no panic on error", func(t *testing.T) {

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

@@ -16,9 +16,6 @@ type FeatureFlags struct {
// all other values as false.
TestBoolFeature bool
// Toggle on and off support for Collapsed Threads
CollapsedThreads bool
// Enable the remote cluster service for shared channels.
EnableRemoteClusterService bool
@@ -81,7 +78,6 @@ type FeatureFlags struct {
func (f *FeatureFlags) SetDefaults() {
f.TestFeature = "off"
f.TestBoolFeature = false
f.CollapsedThreads = true
f.EnableRemoteClusterService = false
f.AppsEnabled = true
f.PluginApps = ""

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

@@ -10,6 +10,8 @@ type BootstrapSelfHostedSignupRequest struct {
type BootstrapSelfHostedSignupResponse struct {
Progress string `json:"progress"`
// email listed on the JWT claim
Email string `json:"email"`
}
type BootstrapSelfHostedSignupResponseInternal struct {

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

@@ -256,11 +256,15 @@ func (er *AppError) Error() string {
// render the error information
sb.WriteString(er.Where)
sb.WriteString(": ")
sb.WriteString(er.Message)
if er.Message != NoTranslation {
sb.WriteString(er.Message)
}
// only render the detailed error when it's present
if er.DetailedError != "" {
sb.WriteString(", ")
if er.Message != NoTranslation {
sb.WriteString(", ")
}
sb.WriteString(er.DetailedError)
}

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

@@ -81,6 +81,11 @@ func TestAppError(t *testing.T) {
t.Log(appErr.Error())
}
func TestAppErrorNoTranslation(t *testing.T) {
appErr := NewAppError("TestAppError", NoTranslation, nil, "test error", http.StatusBadRequest)
require.Equal(t, "TestAppError: test error", appErr.Error())
}
func TestAppErrorJunk(t *testing.T) {
rerr := AppErrorFromJSON(strings.NewReader("<html><body>This is a broken test</body></html>"))
require.Equal(t, "body: <html><body>This is a broken test</body></html>", rerr.DetailedError)

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

@@ -330,6 +330,8 @@ func (env *Environment) Activate(id string) (manifest *model.Manifest, activated
return nil, false, fmt.Errorf("unable to start plugin: must at least have a web app or server component")
}
mlog.Debug("Plugin activated", mlog.String("plugin_id", pluginInfo.Manifest.Id), mlog.String("version", pluginInfo.Manifest.Version))
return pluginInfo.Manifest, true, nil
}

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

@@ -333,7 +333,7 @@ func extractBinary(executablePath string, filename string) error {
if err != nil {
err2 := os.Rename(tmpFileName, executablePath)
if err2 != nil {
mlog.Critical("Unable to restore the backup of the executable file. Restore the executable file manually.")
mlog.Fatal("Unable to restore the backup of the executable file. Restore the executable file manually.")
return errors.Wrap(err2, "critical error: unable to upgrade the binary or restore the old binary version. Please restore it manually")
}
return err
@@ -342,13 +342,13 @@ func extractBinary(executablePath string, filename string) error {
if _, err = io.Copy(outFile, tarReader); err != nil {
err2 := os.Remove(executablePath)
if err2 != nil {
mlog.Critical("Unable to restore the backup of the executable file. Restore the executable file manually.")
mlog.Fatal("Unable to restore the backup of the executable file. Restore the executable file manually.")
return errors.Wrap(err2, "critical error: unable to upgrade the binary or restore the old binary version. Please restore it manually")
}
err2 = os.Rename(tmpFileName, executablePath)
if err2 != nil {
mlog.Critical("Unable to restore the backup of the executable file. Restore the executable file manually.")
mlog.Fatal("Unable to restore the backup of the executable file. Restore the executable file manually.")
return errors.Wrap(err2, "critical error: unable to upgrade the binary or restore the old binary version. Please restore it manually")
}
return err

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

@@ -113,13 +113,10 @@ func Error(msg string, fields ...Field) {
// Convenience method equivalent to calling `Log` with the `Critical` level.
// DEPRECATED: Either use Error or Fatal.
// Critical level isn't added in mlog/levels.go:StdAll so calling this doesn't
// really work. For now we just call Fatal to atleast print something.
func Critical(msg string, fields ...Field) {
logger := getGlobalLogger()
if logger == nil {
defaultLog(LvlCritical, msg, fields...)
return
}
logger.Critical(msg, fields...)
Fatal(msg, fields...)
}
func Fatal(msg string, fields ...Field) {

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

@@ -24,7 +24,6 @@ func TestLoggingBeforeInitialized(t *testing.T) {
mlog.Debug("debug log")
mlog.Warn("warning log")
mlog.Error("error log")
mlog.Critical("critical log")
})
}
@@ -40,14 +39,13 @@ func TestLoggingAfterInitialized(t *testing.T) {
Type: "file",
Format: "json",
FormatOptions: json.RawMessage(`{"enable_caller":true}`),
Levels: []mlog.Level{mlog.LvlCritical, mlog.LvlError, mlog.LvlWarn, mlog.LvlInfo, mlog.LvlDebug},
Levels: []mlog.Level{mlog.LvlError, mlog.LvlWarn, mlog.LvlInfo, mlog.LvlDebug},
},
[]string{
`{"timestamp":0,"level":"debug","msg":"real debug log","caller":"mlog/global_test.go:0"}`,
`{"timestamp":0,"level":"info","msg":"real info log","caller":"mlog/global_test.go:0"}`,
`{"timestamp":0,"level":"warn","msg":"real warning log","caller":"mlog/global_test.go:0"}`,
`{"timestamp":0,"level":"error","msg":"real error log","caller":"mlog/global_test.go:0"}`,
`{"timestamp":0,"level":"critical","msg":"real critical log","caller":"mlog/global_test.go:0"}`,
},
},
{
@@ -56,11 +54,10 @@ func TestLoggingAfterInitialized(t *testing.T) {
Type: "file",
Format: "json",
FormatOptions: json.RawMessage(`{"enable_caller":true}`),
Levels: []mlog.Level{mlog.LvlCritical, mlog.LvlError},
Levels: []mlog.Level{mlog.LvlError},
},
[]string{
`{"timestamp":0,"level":"error","msg":"real error log","caller":"mlog/global_test.go:0"}`,
`{"timestamp":0,"level":"critical","msg":"real critical log","caller":"mlog/global_test.go:0"}`,
},
},
{
@@ -69,14 +66,13 @@ func TestLoggingAfterInitialized(t *testing.T) {
Type: "file",
Format: "plain",
FormatOptions: json.RawMessage(`{"delim":" | ", "enable_caller":true}`),
Levels: []mlog.Level{mlog.LvlCritical, mlog.LvlError, mlog.LvlWarn, mlog.LvlInfo, mlog.LvlDebug},
Levels: []mlog.Level{mlog.LvlError, mlog.LvlWarn, mlog.LvlInfo, mlog.LvlDebug},
},
[]string{
`debug | TIME | real debug log | caller="mlog/global_test.go:0"`,
`info | TIME | real info log | caller="mlog/global_test.go:0"`,
`warn | TIME | real warning log | caller="mlog/global_test.go:0"`,
`error | TIME | real error log | caller="mlog/global_test.go:0"`,
`critical | TIME | real critical log | caller="mlog/global_test.go:0"`,
},
},
{
@@ -85,11 +81,10 @@ func TestLoggingAfterInitialized(t *testing.T) {
Type: "file",
Format: "plain",
FormatOptions: json.RawMessage(`{"delim":" | ", "enable_caller":true}`),
Levels: []mlog.Level{mlog.LvlCritical, mlog.LvlError},
Levels: []mlog.Level{mlog.LvlError},
},
[]string{
`error | TIME | real error log | caller="mlog/global_test.go:0"`,
`critical | TIME | real critical log | caller="mlog/global_test.go:0"`,
},
},
}
@@ -116,7 +111,6 @@ func TestLoggingAfterInitialized(t *testing.T) {
mlog.Info("real info log")
mlog.Warn("real warning log")
mlog.Error("real error log")
mlog.Critical("real critical log")
logger.Shutdown()