[MM-36444] Manage config deprecations for 6.0 (#18035)
* removing deprecated stuff * removing deprecations and marking others for deprecations * removing some of the configs * partially remove ExperimentalChannelOrganization * fixing merge issues * moving default permissions to defaultroles function * removing experimentaltownsquare * removing old tests and remove legacysidebar config * fixing test * removing log * removing unused variables * MM-36444: Fix for renamed functions. * MM-36444: go mod tidy and go mod vendor. * MM-36444: Vendored go modules. * MM-36444: Removes UseExperimentalGossip config field from model. * Fix vendors * fixing test Co-authored-by: Benjamin Cooke <benjamincooke@Benjamins-MacBook-Pro.local> Co-authored-by: Mattermod <mattermod@users.noreply.github.com> Co-authored-by: Martin Kraft <martin@upspin.org> Co-authored-by: Claudio Costa <cstcld91@gmail.com>
Этот коммит содержится в:
238
app/app_test.go
238
app/app_test.go
@@ -186,25 +186,7 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, role.Permissions, permissions, fmt.Sprintf("role %q didn't match", name))
|
||||
}
|
||||
// Add a license and change the policy config.
|
||||
restrictPublicChannel := *th.App.Config().TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPublicChannelManagement
|
||||
restrictPrivateChannel := *th.App.Config().TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPrivateChannelManagement
|
||||
|
||||
defer func() {
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPublicChannelManagement = restrictPublicChannel
|
||||
})
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPrivateChannelManagement = restrictPrivateChannel
|
||||
})
|
||||
}()
|
||||
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPublicChannelManagement = model.PermissionsTeamAdmin
|
||||
})
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPrivateChannelManagement = model.PermissionsTeamAdmin
|
||||
})
|
||||
th.App.Srv().SetLicense(model.NewTestLicense())
|
||||
|
||||
// Check the migration doesn't change anything if run again.
|
||||
@@ -219,235 +201,15 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, permissions, role.Permissions)
|
||||
}
|
||||
|
||||
// Reset the database
|
||||
th.ResetRoleMigration()
|
||||
|
||||
// Do the migration again with different policy config settings and a license.
|
||||
th.App.DoAdvancedPermissionsMigration()
|
||||
|
||||
// Check the role permissions.
|
||||
expected2 := map[string][]string{
|
||||
"channel_user": {
|
||||
model.PermissionReadChannel.Id,
|
||||
model.PermissionAddReaction.Id,
|
||||
model.PermissionRemoveReaction.Id,
|
||||
model.PermissionManagePublicChannelMembers.Id,
|
||||
model.PermissionUploadFile.Id,
|
||||
model.PermissionGetPublicLink.Id,
|
||||
model.PermissionCreatePost.Id,
|
||||
model.PermissionUseChannelMentions.Id,
|
||||
model.PermissionUseSlashCommands.Id,
|
||||
model.PermissionDeletePublicChannel.Id,
|
||||
model.PermissionDeletePrivateChannel.Id,
|
||||
model.PermissionManagePrivateChannelMembers.Id,
|
||||
model.PermissionDeletePost.Id,
|
||||
model.PermissionEditPost.Id,
|
||||
},
|
||||
"channel_admin": {
|
||||
model.PermissionManageChannelRoles.Id,
|
||||
model.PermissionUseGroupMentions.Id,
|
||||
},
|
||||
"team_user": {
|
||||
model.PermissionListTeamChannels.Id,
|
||||
model.PermissionJoinPublicChannels.Id,
|
||||
model.PermissionReadPublicChannel.Id,
|
||||
model.PermissionViewTeam.Id,
|
||||
model.PermissionCreatePublicChannel.Id,
|
||||
model.PermissionCreatePrivateChannel.Id,
|
||||
model.PermissionInviteUser.Id,
|
||||
model.PermissionAddUserToTeam.Id,
|
||||
},
|
||||
"team_post_all": {
|
||||
model.PermissionCreatePost.Id,
|
||||
model.PermissionUseChannelMentions.Id,
|
||||
},
|
||||
"team_post_all_public": {
|
||||
model.PermissionCreatePostPublic.Id,
|
||||
model.PermissionUseChannelMentions.Id,
|
||||
},
|
||||
"team_admin": {
|
||||
model.PermissionRemoveUserFromTeam.Id,
|
||||
model.PermissionManageTeam.Id,
|
||||
model.PermissionImportTeam.Id,
|
||||
model.PermissionManageTeamRoles.Id,
|
||||
model.PermissionManageChannelRoles.Id,
|
||||
model.PermissionManageOthersIncomingWebhooks.Id,
|
||||
model.PermissionManageOthersOutgoingWebhooks.Id,
|
||||
model.PermissionManageSlashCommands.Id,
|
||||
model.PermissionManageOthersSlashCommands.Id,
|
||||
model.PermissionManageIncomingWebhooks.Id,
|
||||
model.PermissionManageOutgoingWebhooks.Id,
|
||||
model.PermissionConvertPublicChannelToPrivate.Id,
|
||||
model.PermissionConvertPrivateChannelToPublic.Id,
|
||||
model.PermissionManagePublicChannelProperties.Id,
|
||||
model.PermissionManagePrivateChannelProperties.Id,
|
||||
model.PermissionDeletePost.Id,
|
||||
model.PermissionDeleteOthersPosts.Id,
|
||||
},
|
||||
"system_user": {
|
||||
model.PermissionListPublicTeams.Id,
|
||||
model.PermissionJoinPublicTeams.Id,
|
||||
model.PermissionCreateDirectChannel.Id,
|
||||
model.PermissionCreateGroupChannel.Id,
|
||||
model.PermissionViewMembers.Id,
|
||||
model.PermissionCreateTeam.Id,
|
||||
},
|
||||
"system_post_all": {
|
||||
model.PermissionCreatePost.Id,
|
||||
model.PermissionUseChannelMentions.Id,
|
||||
},
|
||||
"system_post_all_public": {
|
||||
model.PermissionCreatePostPublic.Id,
|
||||
model.PermissionUseChannelMentions.Id,
|
||||
},
|
||||
"system_user_access_token": {
|
||||
model.PermissionCreateUserAccessToken.Id,
|
||||
model.PermissionReadUserAccessToken.Id,
|
||||
model.PermissionRevokeUserAccessToken.Id,
|
||||
},
|
||||
"system_admin": allPermissionIDs,
|
||||
}
|
||||
|
||||
roles3, err3 := th.App.GetRolesByNames(roleNames)
|
||||
assert.Nil(t, err3)
|
||||
assert.Equal(t, len(roles3), len(roleNames))
|
||||
|
||||
for name, permissions := range expected2 {
|
||||
role, err := th.App.GetRoleByName(context.Background(), name)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, permissions, role.Permissions, fmt.Sprintf("'%v' did not have expected permissions", name))
|
||||
}
|
||||
|
||||
// Remove the license.
|
||||
th.App.Srv().SetLicense(nil)
|
||||
|
||||
// Do the migration again.
|
||||
th.ResetRoleMigration()
|
||||
th.App.DoAdvancedPermissionsMigration()
|
||||
|
||||
// Check the role permissions.
|
||||
roles4, err4 := th.App.GetRolesByNames(roleNames)
|
||||
assert.Nil(t, err4)
|
||||
assert.Equal(t, len(roles4), len(roleNames))
|
||||
|
||||
for name, permissions := range expected1 {
|
||||
role, err := th.App.GetRoleByName(context.Background(), name)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, permissions, role.Permissions)
|
||||
}
|
||||
|
||||
// Check that the config setting for "always" and "time_limit" edit posts is updated correctly.
|
||||
th.ResetRoleMigration()
|
||||
|
||||
allowEditPost := *th.App.Config().ServiceSettings.DEPRECATED_DO_NOT_USE_AllowEditPost
|
||||
postEditTimeLimit := *th.App.Config().ServiceSettings.PostEditTimeLimit
|
||||
|
||||
defer func() {
|
||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_AllowEditPost = allowEditPost })
|
||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.PostEditTimeLimit = postEditTimeLimit })
|
||||
}()
|
||||
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_AllowEditPost = "always"
|
||||
*cfg.ServiceSettings.PostEditTimeLimit = 300
|
||||
})
|
||||
|
||||
th.App.DoAdvancedPermissionsMigration()
|
||||
|
||||
config := th.App.Config()
|
||||
assert.Equal(t, -1, *config.ServiceSettings.PostEditTimeLimit)
|
||||
|
||||
th.ResetRoleMigration()
|
||||
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_AllowEditPost = "time_limit"
|
||||
*cfg.ServiceSettings.PostEditTimeLimit = 300
|
||||
})
|
||||
|
||||
th.App.DoAdvancedPermissionsMigration()
|
||||
config = th.App.Config()
|
||||
assert.Equal(t, 300, *config.ServiceSettings.PostEditTimeLimit)
|
||||
}
|
||||
|
||||
func TestDoEmojisPermissionsMigration(t *testing.T) {
|
||||
th := SetupWithoutPreloadMigrations(t)
|
||||
defer th.TearDown()
|
||||
|
||||
// Add a license and change the policy config.
|
||||
restrictCustomEmojiCreation := *th.App.Config().ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation
|
||||
|
||||
defer func() {
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = restrictCustomEmojiCreation
|
||||
})
|
||||
}()
|
||||
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RestrictEmojiCreationSystemAdmin
|
||||
})
|
||||
|
||||
th.ResetEmojisMigration()
|
||||
th.App.DoEmojisPermissionsMigration()
|
||||
|
||||
expectedSystemAdmin := allPermissionIDs
|
||||
sort.Strings(expectedSystemAdmin)
|
||||
|
||||
role1, err1 := th.App.GetRoleByName(context.Background(), model.SystemAdminRoleId)
|
||||
assert.Nil(t, err1)
|
||||
sort.Strings(role1.Permissions)
|
||||
assert.Equal(t, expectedSystemAdmin, role1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SystemAdminRoleId))
|
||||
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RestrictEmojiCreationAdmin
|
||||
})
|
||||
|
||||
th.ResetEmojisMigration()
|
||||
th.App.DoEmojisPermissionsMigration()
|
||||
|
||||
role2, err2 := th.App.GetRoleByName(context.Background(), model.TeamAdminRoleId)
|
||||
assert.Nil(t, err2)
|
||||
expected2 := []string{
|
||||
model.PermissionRemoveUserFromTeam.Id,
|
||||
model.PermissionManageTeam.Id,
|
||||
model.PermissionImportTeam.Id,
|
||||
model.PermissionManageTeamRoles.Id,
|
||||
model.PermissionReadPublicChannelGroups.Id,
|
||||
model.PermissionReadPrivateChannelGroups.Id,
|
||||
model.PermissionManageChannelRoles.Id,
|
||||
model.PermissionManageOthersIncomingWebhooks.Id,
|
||||
model.PermissionManageOthersOutgoingWebhooks.Id,
|
||||
model.PermissionManageSlashCommands.Id,
|
||||
model.PermissionManageOthersSlashCommands.Id,
|
||||
model.PermissionManageIncomingWebhooks.Id,
|
||||
model.PermissionManageOutgoingWebhooks.Id,
|
||||
model.PermissionDeletePost.Id,
|
||||
model.PermissionDeleteOthersPosts.Id,
|
||||
model.PermissionCreateEmojis.Id,
|
||||
model.PermissionDeleteEmojis.Id,
|
||||
model.PermissionAddReaction.Id,
|
||||
model.PermissionCreatePost.Id,
|
||||
model.PermissionManagePublicChannelMembers.Id,
|
||||
model.PermissionManagePrivateChannelMembers.Id,
|
||||
model.PermissionRemoveReaction.Id,
|
||||
model.PermissionUseChannelMentions.Id,
|
||||
model.PermissionUseGroupMentions.Id,
|
||||
model.PermissionConvertPublicChannelToPrivate.Id,
|
||||
model.PermissionConvertPrivateChannelToPublic.Id,
|
||||
}
|
||||
sort.Strings(expected2)
|
||||
sort.Strings(role2.Permissions)
|
||||
assert.Equal(t, expected2, role2.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.TeamAdminRoleId))
|
||||
|
||||
systemAdmin1, systemAdminErr1 := th.App.GetRoleByName(context.Background(), model.SystemAdminRoleId)
|
||||
assert.Nil(t, systemAdminErr1)
|
||||
sort.Strings(systemAdmin1.Permissions)
|
||||
assert.Equal(t, expectedSystemAdmin, systemAdmin1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SystemAdminRoleId))
|
||||
|
||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RestrictEmojiCreationAll
|
||||
})
|
||||
|
||||
th.ResetEmojisMigration()
|
||||
th.App.DoEmojisPermissionsMigration()
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/mattermost/mattermost-server/v6/model"
|
||||
"github.com/mattermost/mattermost-server/v6/shared/mlog"
|
||||
"github.com/mattermost/mattermost-server/v6/utils"
|
||||
)
|
||||
|
||||
const EmojisPermissionsMigrationKey = "EmojisPermissionsMigrationComplete"
|
||||
@@ -31,7 +30,6 @@ func (s *Server) doAdvancedPermissionsMigration() {
|
||||
|
||||
mlog.Info("Migrating roles to database.")
|
||||
roles := model.MakeDefaultRoles()
|
||||
roles = utils.SetRolePermissionsFromConfig(roles, s.Config(), s.License() != nil)
|
||||
|
||||
allSucceeded := true
|
||||
|
||||
@@ -68,11 +66,9 @@ func (s *Server) doAdvancedPermissionsMigration() {
|
||||
}
|
||||
|
||||
config := s.Config()
|
||||
if *config.ServiceSettings.DEPRECATED_DO_NOT_USE_AllowEditPost == model.AllowEditPostAlways {
|
||||
*config.ServiceSettings.PostEditTimeLimit = -1
|
||||
if _, _, err := s.SaveConfig(config, true); err != nil {
|
||||
mlog.Error("Failed to update config in Advanced Permissions Phase 1 Migration.", mlog.Err(err))
|
||||
}
|
||||
*config.ServiceSettings.PostEditTimeLimit = -1
|
||||
if _, _, err := s.SaveConfig(config, true); err != nil {
|
||||
mlog.Error("Failed to update config in Advanced Permissions Phase 1 Migration.", mlog.Err(err))
|
||||
}
|
||||
|
||||
system := model.System{
|
||||
@@ -110,23 +106,11 @@ func (s *Server) doEmojisPermissionsMigration() {
|
||||
var err *model.AppError
|
||||
|
||||
mlog.Info("Migrating emojis config to database.")
|
||||
switch *s.Config().ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation {
|
||||
case model.RestrictEmojiCreationAll:
|
||||
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))
|
||||
return
|
||||
}
|
||||
case model.RestrictEmojiCreationAdmin:
|
||||
role, err = s.GetRoleByName(context.Background(), model.TeamAdminRoleId)
|
||||
if err != nil {
|
||||
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
|
||||
return
|
||||
}
|
||||
case model.RestrictEmojiCreationSystemAdmin:
|
||||
role = nil
|
||||
default:
|
||||
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config. Invalid restrict emoji creation setting")
|
||||
|
||||
// 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))
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch
|
||||
post.AddProp("from_bot", "true")
|
||||
}
|
||||
|
||||
if a.Srv().License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly &&
|
||||
if a.Srv().License() != nil &&
|
||||
!post.IsSystemMessage() &&
|
||||
channel.Name == model.DefaultChannelName &&
|
||||
!a.RolesGrantPermission(user.GetRoles(), model.PermissionManageSystem.Id) {
|
||||
|
||||
@@ -29,7 +29,7 @@ func (a *App) SaveReactionForPost(c *request.Context, reaction *model.Reaction)
|
||||
return nil, model.NewAppError("deleteReactionForPost", "api.reaction.save.archived_channel.app_error", nil, "", http.StatusForbidden)
|
||||
}
|
||||
|
||||
if a.Srv().License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly && channel.Name == model.DefaultChannelName {
|
||||
if a.Srv().License() != nil && channel.Name == model.DefaultChannelName {
|
||||
var user *model.User
|
||||
user, err = a.GetUser(reaction.UserId)
|
||||
if err != nil {
|
||||
@@ -123,7 +123,7 @@ func (a *App) DeleteReactionForPost(c *request.Context, reaction *model.Reaction
|
||||
return model.NewAppError("DeleteReactionForPost", "api.reaction.delete.archived_channel.app_error", nil, "", http.StatusForbidden)
|
||||
}
|
||||
|
||||
if a.Srv().License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly && channel.Name == model.DefaultChannelName {
|
||||
if a.Srv().License() != nil && channel.Name == model.DefaultChannelName {
|
||||
user, err := a.GetUser(reaction.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -777,7 +777,7 @@ func (a *App) HandleIncomingWebhook(c *request.Context, hookID string, req *mode
|
||||
}
|
||||
user = result.Data.(*model.User)
|
||||
|
||||
if a.Srv().License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly &&
|
||||
if a.Srv().License() != nil &&
|
||||
channel.Name == model.DefaultChannelName && !a.RolesGrantPermission(user.GetRoles(), model.PermissionManageSystem.Id) {
|
||||
return model.NewAppError("HandleIncomingWebhook", "api.post.create_post.town_square_read_only", nil, "", http.StatusForbidden)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user