diff --git a/api4/apitestlib.go b/api4/apitestlib.go index cc457dd231..b0607f7c79 100644 --- a/api4/apitestlib.go +++ b/api4/apitestlib.go @@ -1116,7 +1116,7 @@ func (th *TestHelper) SaveDefaultRolePermissions() map[string][]string { "channel_user", "channel_admin", } { - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) @@ -1133,7 +1133,7 @@ func (th *TestHelper) RestoreDefaultRolePermissions(data map[string][]string) { utils.DisableDebugLogForTest() for roleName, permissions := range data { - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) @@ -1158,7 +1158,7 @@ func (th *TestHelper) RestoreDefaultRolePermissions(data map[string][]string) { func (th *TestHelper) RemovePermissionFromRole(permission string, roleName string) { utils.DisableDebugLogForTest() - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) @@ -1190,7 +1190,7 @@ func (th *TestHelper) RemovePermissionFromRole(permission string, roleName strin func (th *TestHelper) AddPermissionToRole(permission string, roleName string) { utils.DisableDebugLogForTest() - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) diff --git a/api4/group_test.go b/api4/group_test.go index 26f46da357..a97f7df2cd 100644 --- a/api4/group_test.go +++ b/api4/group_test.go @@ -4,6 +4,7 @@ package api4 import ( + "context" "fmt" "net/http" "testing" @@ -596,7 +597,7 @@ func TestPatchGroupChannel(t *testing.T) { assert.NotNil(t, groupSyncable) assert.True(t, groupSyncable.AutoAdd) - role, err := th.App.GetRoleByName("channel_user") + role, err := th.App.GetRoleByName(context.Background(), "channel_user") require.Nil(t, err) originalPermissions := role.Permissions _, err = th.App.PatchRole(role, &model.RolePatch{Permissions: &[]string{}}) diff --git a/api4/role.go b/api4/role.go index 40fe4fcb67..8d231c0c0c 100644 --- a/api4/role.go +++ b/api4/role.go @@ -56,7 +56,7 @@ func getRoleByName(c *Context, w http.ResponseWriter, r *http.Request) { return } - role, err := c.App.GetRoleByName(c.Params.RoleName) + role, err := c.App.GetRoleByName(r.Context(), c.Params.RoleName) if err != nil { c.Err = err return diff --git a/api4/role_test.go b/api4/role_test.go index 8d2f761526..1b275013a6 100644 --- a/api4/role_test.go +++ b/api4/role_test.go @@ -4,6 +4,7 @@ package api4 import ( + "context" "strings" "testing" @@ -180,7 +181,7 @@ func TestPatchRole(t *testing.T) { th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { // Cannot edit a system admin - adminRole, err := th.App.Srv().Store.Role().GetByName("system_admin") + adminRole, err := th.App.Srv().Store.Role().GetByName(context.Background(), "system_admin") assert.NoError(t, err) defer th.App.Srv().Store.Job().Delete(adminRole.Id) @@ -188,7 +189,7 @@ func TestPatchRole(t *testing.T) { CheckNotImplementedStatus(t, resp) // Cannot give other roles read / write to system roles or manage roles because only system admin can do these actions - systemManager, err := th.App.Srv().Store.Role().GetByName("system_manager") + systemManager, err := th.App.Srv().Store.Role().GetByName(context.Background(), "system_manager") assert.NoError(t, err) defer th.App.Srv().Store.Job().Delete(systemManager.Id) @@ -271,7 +272,7 @@ func TestPatchRole(t *testing.T) { license.Features.GuestAccountsPermissions = model.NewBool(false) th.App.Srv().SetLicense(license) - guestRole, err := th.App.Srv().Store.Role().GetByName("system_guest") + guestRole, err := th.App.Srv().Store.Role().GetByName(context.Background(), "system_guest") require.NoError(t, err) received, resp = client.PatchRole(guestRole.Id, patch) CheckNotImplementedStatus(t, resp) @@ -281,7 +282,7 @@ func TestPatchRole(t *testing.T) { license := model.NewTestLicense() license.Features.GuestAccountsPermissions = model.NewBool(true) th.App.Srv().SetLicense(license) - guestRole, err := th.App.Srv().Store.Role().GetByName("system_guest") + guestRole, err := th.App.Srv().Store.Role().GetByName(context.Background(), "system_guest") require.NoError(t, err) _, resp = client.PatchRole(guestRole.Id, patch) CheckNoError(t, resp) diff --git a/app/app_iface.go b/app/app_iface.go index 559402555b..86c1299725 100644 --- a/app/app_iface.go +++ b/app/app_iface.go @@ -687,7 +687,7 @@ type AppIface interface { GetRetentionPoliciesCount() (int64, *model.AppError) GetRetentionPolicy(policyID string) (*model.RetentionPolicyWithTeamAndChannelCounts, *model.AppError) GetRole(id string) (*model.Role, *model.AppError) - GetRoleByName(name string) (*model.Role, *model.AppError) + GetRoleByName(ctx context.Context, name string) (*model.Role, *model.AppError) GetRolesByNames(names []string) ([]*model.Role, *model.AppError) GetSamlCertificateStatus() *model.SamlCertificateStatus GetSamlMetadata() (string, *model.AppError) diff --git a/app/app_test.go b/app/app_test.go index 0f48fcd6e5..4be8fcfd5a 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -4,6 +4,7 @@ package app import ( + "context" "fmt" "sort" "testing" @@ -185,7 +186,7 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) { // Check the migration matches what's expected. for name, permissions := range expected1 { - role, err := th.App.GetRoleByName(name) + role, err := th.App.GetRoleByName(context.Background(), name) assert.Nil(t, err) assert.Equal(t, role.Permissions, permissions, fmt.Sprintf("role %q didn't match", name)) } @@ -218,7 +219,7 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) { assert.Equal(t, len(roles2), len(roleNames)) for name, permissions := range expected1 { - role, err := th.App.GetRoleByName(name) + role, err := th.App.GetRoleByName(context.Background(), name) assert.Nil(t, err) assert.Equal(t, permissions, role.Permissions) } @@ -317,7 +318,7 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) { assert.Equal(t, len(roles3), len(roleNames)) for name, permissions := range expected2 { - role, err := th.App.GetRoleByName(name) + 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)) } @@ -335,7 +336,7 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) { assert.Equal(t, len(roles4), len(roleNames)) for name, permissions := range expected1 { - role, err := th.App.GetRoleByName(name) + role, err := th.App.GetRoleByName(context.Background(), name) assert.Nil(t, err) assert.Equal(t, permissions, role.Permissions) } @@ -396,7 +397,7 @@ func TestDoEmojisPermissionsMigration(t *testing.T) { expectedSystemAdmin := allPermissionIDs sort.Strings(expectedSystemAdmin) - role1, err1 := th.App.GetRoleByName(model.SYSTEM_ADMIN_ROLE_ID) + role1, err1 := th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID) assert.Nil(t, err1) sort.Strings(role1.Permissions) assert.Equal(t, expectedSystemAdmin, role1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_ADMIN_ROLE_ID)) @@ -408,7 +409,7 @@ func TestDoEmojisPermissionsMigration(t *testing.T) { th.ResetEmojisMigration() th.App.DoEmojisPermissionsMigration() - role2, err2 := th.App.GetRoleByName(model.TEAM_ADMIN_ROLE_ID) + role2, err2 := th.App.GetRoleByName(context.Background(), model.TEAM_ADMIN_ROLE_ID) assert.Nil(t, err2) expected2 := []string{ model.PERMISSION_REMOVE_USER_FROM_TEAM.Id, @@ -442,7 +443,7 @@ func TestDoEmojisPermissionsMigration(t *testing.T) { sort.Strings(role2.Permissions) assert.Equal(t, expected2, role2.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.TEAM_ADMIN_ROLE_ID)) - systemAdmin1, systemAdminErr1 := th.App.GetRoleByName(model.SYSTEM_ADMIN_ROLE_ID) + systemAdmin1, systemAdminErr1 := th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID) assert.Nil(t, systemAdminErr1) sort.Strings(systemAdmin1.Permissions) assert.Equal(t, expectedSystemAdmin, systemAdmin1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_ADMIN_ROLE_ID)) @@ -454,7 +455,7 @@ func TestDoEmojisPermissionsMigration(t *testing.T) { th.ResetEmojisMigration() th.App.DoEmojisPermissionsMigration() - role3, err3 := th.App.GetRoleByName(model.SYSTEM_USER_ROLE_ID) + role3, err3 := th.App.GetRoleByName(context.Background(), model.SYSTEM_USER_ROLE_ID) assert.Nil(t, err3) expected3 := []string{ model.PERMISSION_LIST_PUBLIC_TEAMS.Id, @@ -470,7 +471,7 @@ func TestDoEmojisPermissionsMigration(t *testing.T) { sort.Strings(role3.Permissions) assert.Equal(t, expected3, role3.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_USER_ROLE_ID)) - systemAdmin2, systemAdminErr2 := th.App.GetRoleByName(model.SYSTEM_ADMIN_ROLE_ID) + systemAdmin2, systemAdminErr2 := th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID) assert.Nil(t, systemAdminErr2) sort.Strings(systemAdmin2.Permissions) assert.Equal(t, expectedSystemAdmin, systemAdmin2.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_ADMIN_ROLE_ID)) diff --git a/app/channel.go b/app/channel.go index 483305c6b0..bf26d99523 100644 --- a/app/channel.go +++ b/app/channel.go @@ -15,6 +15,7 @@ import ( "github.com/mattermost/mattermost-server/v5/shared/i18n" "github.com/mattermost/mattermost-server/v5/shared/mlog" "github.com/mattermost/mattermost-server/v5/store" + "github.com/mattermost/mattermost-server/v5/store/sqlstore" "github.com/mattermost/mattermost-server/v5/utils" ) @@ -854,14 +855,14 @@ func (a *App) GetChannelModerationsForChannel(channel *model.Channel) ([]*model. return nil, err } - memberRole, err := a.GetRoleByName(memberRoleName) + memberRole, err := a.GetRoleByName(context.Background(), memberRoleName) if err != nil { return nil, err } var guestRole *model.Role if guestRoleName != "" { - guestRole, err = a.GetRoleByName(guestRoleName) + guestRole, err = a.GetRoleByName(context.Background(), guestRoleName) if err != nil { return nil, err } @@ -871,14 +872,14 @@ func (a *App) GetChannelModerationsForChannel(channel *model.Channel) ([]*model. if err != nil { return nil, err } - higherScopedMemberRole, err := a.GetRoleByName(higherScopedMemberRoleName) + higherScopedMemberRole, err := a.GetRoleByName(context.Background(), higherScopedMemberRoleName) if err != nil { return nil, err } var higherScopedGuestRole *model.Role if higherScopedGuestRoleName != "" { - higherScopedGuestRole, err = a.GetRoleByName(higherScopedGuestRoleName) + higherScopedGuestRole, err = a.GetRoleByName(context.Background(), higherScopedGuestRoleName) if err != nil { return nil, err } @@ -894,14 +895,15 @@ func (a *App) PatchChannelModerationsForChannel(channel *model.Channel, channelM return nil, err } - higherScopedMemberRole, err := a.GetRoleByName(higherScopedMemberRoleName) + ctx := sqlstore.WithMaster(context.Background()) + higherScopedMemberRole, err := a.GetRoleByName(ctx, higherScopedMemberRoleName) if err != nil { return nil, err } var higherScopedGuestRole *model.Role if higherScopedGuestRoleName != "" { - higherScopedGuestRole, err = a.GetRoleByName(higherScopedGuestRoleName) + higherScopedGuestRole, err = a.GetRoleByName(ctx, higherScopedGuestRoleName) if err != nil { return nil, err } @@ -933,7 +935,7 @@ func (a *App) PatchChannelModerationsForChannel(channel *model.Channel, channelM // Send a websocket event about this new role. The other new roles—member and guest—get emitted when they're updated. var adminRole *model.Role - adminRole, err = a.GetRoleByName(scheme.DefaultChannelAdminRole) + adminRole, err = a.GetRoleByName(ctx, scheme.DefaultChannelAdminRole) if err != nil { return nil, err } @@ -951,14 +953,14 @@ func (a *App) PatchChannelModerationsForChannel(channel *model.Channel, channelM guestRoleName := scheme.DefaultChannelGuestRole memberRoleName := scheme.DefaultChannelUserRole - memberRole, err := a.GetRoleByName(memberRoleName) + memberRole, err := a.GetRoleByName(ctx, memberRoleName) if err != nil { return nil, err } var guestRole *model.Role if guestRoleName != "" { - guestRole, err = a.GetRoleByName(guestRoleName) + guestRole, err = a.GetRoleByName(ctx, guestRoleName) if err != nil { return nil, err } @@ -1090,7 +1092,7 @@ func (a *App) UpdateChannelMemberRoles(channelID string, userID string, newRoles for _, roleName := range strings.Fields(newRoles) { var role *model.Role - role, err = a.GetRoleByName(roleName) + role, err = a.GetRoleByName(context.Background(), roleName) if err != nil { err.StatusCode = http.StatusBadRequest return nil, err diff --git a/app/channel_test.go b/app/channel_test.go index fd3f55e30b..a840a6c6e5 100644 --- a/app/channel_test.go +++ b/app/channel_test.go @@ -1813,7 +1813,7 @@ func TestPatchChannelModerationsForChannel(t *testing.T) { if higherScopedPermissionsOverriden { higherScopedGuestRoleName, higherScopedMemberRoleName, _, _ := th.App.GetTeamSchemeChannelRoles(channel.TeamId) if tc.HigherScopedMemberPermissions != nil { - higherScopedMemberRole, err := th.App.GetRoleByName(higherScopedMemberRoleName) + higherScopedMemberRole, err := th.App.GetRoleByName(context.Background(), higherScopedMemberRoleName) require.Nil(t, err) originalPermissions := higherScopedMemberRole.Permissions @@ -1822,7 +1822,7 @@ func TestPatchChannelModerationsForChannel(t *testing.T) { } if tc.HigherScopedGuestPermissions != nil { - higherScopedGuestRole, err := th.App.GetRoleByName(higherScopedGuestRoleName) + higherScopedGuestRole, err := th.App.GetRoleByName(context.Background(), higherScopedGuestRoleName) require.Nil(t, err) originalPermissions := higherScopedGuestRole.Permissions @@ -1911,8 +1911,8 @@ func TestPatchChannelModerationsForChannel(t *testing.T) { wg.Wait() higherScopedGuestRoleName, higherScopedMemberRoleName, _, _ := th.App.GetTeamSchemeChannelRoles(channel.TeamId) - higherScopedMemberRole, _ := th.App.GetRoleByName(higherScopedMemberRoleName) - higherScopedGuestRole, _ := th.App.GetRoleByName(higherScopedGuestRoleName) + higherScopedMemberRole, _ := th.App.GetRoleByName(context.Background(), higherScopedMemberRoleName) + higherScopedGuestRole, _ := th.App.GetRoleByName(context.Background(), higherScopedGuestRoleName) assert.Contains(t, higherScopedMemberRole.Permissions, createPosts) assert.Contains(t, higherScopedGuestRole.Permissions, createPosts) }) diff --git a/app/helper_test.go b/app/helper_test.go index 11f1060a8c..cb2a6c9370 100644 --- a/app/helper_test.go +++ b/app/helper_test.go @@ -5,6 +5,7 @@ package app import ( "bytes" + "context" "io/ioutil" "os" "path/filepath" @@ -461,7 +462,7 @@ func (th *TestHelper) CreateScheme() (*model.Scheme, []*model.Role) { var roles []*model.Role for _, roleName := range roleNames { - role, err := th.App.GetRoleByName(roleName) + role, err := th.App.GetRoleByName(context.Background(), roleName) if err != nil { panic(err) } @@ -652,7 +653,7 @@ func (th *TestHelper) SetupPluginAPI() *PluginAPI { func (th *TestHelper) RemovePermissionFromRole(permission string, roleName string) { utils.DisableDebugLogForTest() - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) @@ -684,7 +685,7 @@ func (th *TestHelper) RemovePermissionFromRole(permission string, roleName strin func (th *TestHelper) AddPermissionToRole(permission string, roleName string) { utils.DisableDebugLogForTest() - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) diff --git a/app/import_functions.go b/app/import_functions.go index 3f3f00c9d3..70684f7bc8 100644 --- a/app/import_functions.go +++ b/app/import_functions.go @@ -121,7 +121,7 @@ func (a *App) importRole(data *RoleImportData, dryRun bool, isSchemeRole bool) * return nil } - role, err := a.GetRoleByName(*data.Name) + role, err := a.GetRoleByName(context.Background(), *data.Name) if err != nil { role = new(model.Role) } diff --git a/app/import_functions_test.go b/app/import_functions_test.go index 6f9a87114f..85681e3688 100644 --- a/app/import_functions_test.go +++ b/app/import_functions_test.go @@ -99,42 +99,42 @@ func TestImportImportScheme(t *testing.T) { assert.Equal(t, *data.Description, scheme.Description) assert.Equal(t, *data.Scope, scheme.Scope) - role, nErr := th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole) + role, nErr := th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName) @@ -156,42 +156,42 @@ func TestImportImportScheme(t *testing.T) { assert.Equal(t, *data.Description, scheme.Description) assert.Equal(t, *data.Scope, scheme.Scope) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName) @@ -286,42 +286,42 @@ func TestImportImportSchemeWithoutGuestRoles(t *testing.T) { assert.Equal(t, *data.Description, scheme.Description) assert.Equal(t, *data.Scope, scheme.Scope) - role, nErr := th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole) + role, nErr := th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName) @@ -343,42 +343,42 @@ func TestImportImportSchemeWithoutGuestRoles(t *testing.T) { assert.Equal(t, *data.Description, scheme.Description) assert.Equal(t, *data.Scope, scheme.Scope) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultTeamGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelAdminRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelUserRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName) assert.False(t, role.BuiltIn) assert.True(t, role.SchemeManaged) - role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), scheme.DefaultChannelGuestRole) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName) @@ -413,7 +413,7 @@ func TestImportImportRole(t *testing.T) { err := th.App.importRole(&data, true, false) require.NotNil(t, err, "Should have failed to import.") - _, nErr := th.App.Srv().Store.Role().GetByName(rid1) + _, nErr := th.App.Srv().Store.Role().GetByName(context.Background(), rid1) require.Error(t, nErr, "Should have failed to import.") // Try importing the valid role in dryRun mode. @@ -422,7 +422,7 @@ func TestImportImportRole(t *testing.T) { err = th.App.importRole(&data, true, false) require.Nil(t, err, "Should have succeeded.") - _, nErr = th.App.Srv().Store.Role().GetByName(rid1) + _, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), rid1) require.Error(t, nErr, "Role should not have imported as we are in dry run mode.") // Try importing an invalid role. @@ -431,7 +431,7 @@ func TestImportImportRole(t *testing.T) { err = th.App.importRole(&data, false, false) require.NotNil(t, err, "Should have failed to import.") - _, nErr = th.App.Srv().Store.Role().GetByName(rid1) + _, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), rid1) require.Error(t, nErr, "Role should not have imported.") // Try importing a valid role with all params set. @@ -442,7 +442,7 @@ func TestImportImportRole(t *testing.T) { err = th.App.importRole(&data, false, false) require.Nil(t, err, "Should have succeeded.") - role, nErr := th.App.Srv().Store.Role().GetByName(rid1) + role, nErr := th.App.Srv().Store.Role().GetByName(context.Background(), rid1) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.Name, role.Name) @@ -460,7 +460,7 @@ func TestImportImportRole(t *testing.T) { err = th.App.importRole(&data, false, true) require.Nil(t, err, "Should have succeeded. %v", err) - role, nErr = th.App.Srv().Store.Role().GetByName(rid1) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), rid1) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data.Name, role.Name) @@ -479,7 +479,7 @@ func TestImportImportRole(t *testing.T) { err = th.App.importRole(&data2, false, false) require.Nil(t, err, "Should have succeeded.") - role, nErr = th.App.Srv().Store.Role().GetByName(rid1) + role, nErr = th.App.Srv().Store.Role().GetByName(context.Background(), rid1) require.NoError(t, nErr, "Should have found the imported role.") assert.Equal(t, *data2.Name, role.Name) diff --git a/app/job_test.go b/app/job_test.go index 72a2d4e3ea..d6d596c311 100644 --- a/app/job_test.go +++ b/app/job_test.go @@ -4,12 +4,14 @@ package app import ( + "context" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/mattermost/mattermost-server/v5/model" + "github.com/mattermost/mattermost-server/v5/store/sqlstore" ) func TestGetJob(t *testing.T) { @@ -94,7 +96,8 @@ func TestSessionHasPermissionToCreateJob(t *testing.T) { assert.Equal(t, testCase.PermissionRequired.Id, permissionRequired.Id) } - role, _ := th.App.GetRoleByName(model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID) + ctx := sqlstore.WithMaster(context.Background()) + role, _ := th.App.GetRoleByName(ctx, model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID) role.Permissions = append(role.Permissions, model.PERMISSION_CREATE_POST_BLEVE_INDEXES_JOB.Id) @@ -179,7 +182,8 @@ func TestSessionHasPermissionToReadJob(t *testing.T) { assert.Equal(t, testCase.PermissionRequired.Id, permissionRequired.Id) } - role, _ := th.App.GetRoleByName(model.SYSTEM_MANAGER_ROLE_ID) + ctx := sqlstore.WithMaster(context.Background()) + role, _ := th.App.GetRoleByName(ctx, model.SYSTEM_MANAGER_ROLE_ID) role.Permissions = append(role.Permissions, model.PERMISSION_READ_DATA_RETENTION_JOB.Id) diff --git a/app/migrations.go b/app/migrations.go index 39d5a220e0..ff14d4c833 100644 --- a/app/migrations.go +++ b/app/migrations.go @@ -4,6 +4,7 @@ package app import ( + "context" "fmt" "reflect" @@ -37,7 +38,7 @@ func (a *App) DoAdvancedPermissionsMigration() { } // If this failed for reasons other than the role already existing, don't mark the migration as done. - fetchedRole, err := a.Srv().Store.Role().GetByName(role.Name) + fetchedRole, err := a.Srv().Store.Role().GetByName(context.Background(), role.Name) if err != nil { mlog.Critical("Failed to migrate role to database.", mlog.Err(err)) allSucceeded = false @@ -103,13 +104,13 @@ func (a *App) DoEmojisPermissionsMigration() { mlog.Info("Migrating emojis config to database.") switch *a.Config().ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation { case model.RESTRICT_EMOJI_CREATION_ALL: - role, err = a.GetRoleByName(model.SYSTEM_USER_ROLE_ID) + role, err = a.GetRoleByName(context.Background(), model.SYSTEM_USER_ROLE_ID) if err != nil { mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err)) return } case model.RESTRICT_EMOJI_CREATION_ADMIN: - role, err = a.GetRoleByName(model.TEAM_ADMIN_ROLE_ID) + role, err = a.GetRoleByName(context.Background(), model.TEAM_ADMIN_ROLE_ID) if err != nil { mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err)) return @@ -129,7 +130,7 @@ func (a *App) DoEmojisPermissionsMigration() { } } - systemAdminRole, err = a.GetRoleByName(model.SYSTEM_ADMIN_ROLE_ID) + systemAdminRole, err = a.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID) if err != nil { mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err)) return @@ -164,19 +165,19 @@ func (a *App) DoGuestRolesCreationMigration() { roles := model.MakeDefaultRoles() allSucceeded := true - if _, err := a.Srv().Store.Role().GetByName(model.CHANNEL_GUEST_ROLE_ID); err != nil { + if _, err := a.Srv().Store.Role().GetByName(context.Background(), model.CHANNEL_GUEST_ROLE_ID); err != nil { if _, err := a.Srv().Store.Role().Save(roles[model.CHANNEL_GUEST_ROLE_ID]); err != nil { mlog.Critical("Failed to create new guest role to database.", mlog.Err(err)) allSucceeded = false } } - if _, err := a.Srv().Store.Role().GetByName(model.TEAM_GUEST_ROLE_ID); err != nil { + if _, err := a.Srv().Store.Role().GetByName(context.Background(), model.TEAM_GUEST_ROLE_ID); err != nil { if _, err := a.Srv().Store.Role().Save(roles[model.TEAM_GUEST_ROLE_ID]); err != nil { mlog.Critical("Failed to create new guest role to database.", mlog.Err(err)) allSucceeded = false } } - if _, err := a.Srv().Store.Role().GetByName(model.SYSTEM_GUEST_ROLE_ID); err != nil { + if _, err := a.Srv().Store.Role().GetByName(context.Background(), model.SYSTEM_GUEST_ROLE_ID); err != nil { if _, err := a.Srv().Store.Role().Save(roles[model.SYSTEM_GUEST_ROLE_ID]); err != nil { mlog.Critical("Failed to create new guest role to database.", mlog.Err(err)) allSucceeded = false @@ -251,19 +252,19 @@ func (a *App) DoSystemConsoleRolesCreationMigration() { roles := model.MakeDefaultRoles() allSucceeded := true - if _, err := a.Srv().Store.Role().GetByName(model.SYSTEM_MANAGER_ROLE_ID); err != nil { + if _, err := a.Srv().Store.Role().GetByName(context.Background(), model.SYSTEM_MANAGER_ROLE_ID); err != nil { if _, err := a.Srv().Store.Role().Save(roles[model.SYSTEM_MANAGER_ROLE_ID]); err != nil { mlog.Critical("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SYSTEM_MANAGER_ROLE_ID)) allSucceeded = false } } - if _, err := a.Srv().Store.Role().GetByName(model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID); err != nil { + if _, err := a.Srv().Store.Role().GetByName(context.Background(), model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID); err != nil { if _, err := a.Srv().Store.Role().Save(roles[model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID]); err != nil { mlog.Critical("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID)) allSucceeded = false } } - if _, err := a.Srv().Store.Role().GetByName(model.SYSTEM_USER_MANAGER_ROLE_ID); err != nil { + if _, err := a.Srv().Store.Role().GetByName(context.Background(), model.SYSTEM_USER_MANAGER_ROLE_ID); err != nil { if _, err := a.Srv().Store.Role().Save(roles[model.SYSTEM_USER_MANAGER_ROLE_ID]); err != nil { mlog.Critical("Failed to create new role.", mlog.Err(err), mlog.String("role", model.SYSTEM_USER_MANAGER_ROLE_ID)) allSucceeded = false diff --git a/app/opentracing/opentracing_layer.go b/app/opentracing/opentracing_layer.go index 40b590c468..bdf5c8d15e 100644 --- a/app/opentracing/opentracing_layer.go +++ b/app/opentracing/opentracing_layer.go @@ -8049,7 +8049,7 @@ func (a *OpenTracingAppLayer) GetRole(id string) (*model.Role, *model.AppError) return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetRoleByName(name string) (*model.Role, *model.AppError) { +func (a *OpenTracingAppLayer) GetRoleByName(ctx context.Context, name string) (*model.Role, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetRoleByName") @@ -8061,7 +8061,7 @@ func (a *OpenTracingAppLayer) GetRoleByName(name string) (*model.Role, *model.Ap }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetRoleByName(name) + resultVar0, resultVar1 := a.app.GetRoleByName(ctx, name) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) diff --git a/app/permissions.go b/app/permissions.go index 8863290184..e9793af024 100644 --- a/app/permissions.go +++ b/app/permissions.go @@ -5,6 +5,7 @@ package app import ( "bufio" + "context" "encoding/json" "fmt" "io" @@ -98,7 +99,7 @@ func (a *App) ExportPermissions(w io.Writer) error { if roleName == "" { continue } - role, err := a.GetRoleByName(roleName) + role, err := a.GetRoleByName(context.Background(), roleName) if err != nil { return err } @@ -171,7 +172,7 @@ func (a *App) ImportPermissions(jsonl io.Reader) error { if schemeConveyor.Name == systemSchemeName { for _, roleIn := range schemeConveyor.Roles { - dbRole, err := a.GetRoleByName(roleIn.Name) + dbRole, err := a.GetRoleByName(context.Background(), roleIn.Name) if err != nil { rollback(a, createdSchemeIDs) return errors.New(err.Message) @@ -236,7 +237,7 @@ func rollback(a *App, createdSchemeIDs []string) { func updateRole(a *App, sc *model.SchemeConveyor, roleCreatedName, defaultRoleName string) error { var err *model.AppError - roleCreated, err := a.GetRoleByName(roleCreatedName) + roleCreated, err := a.GetRoleByName(context.Background(), roleCreatedName) if err != nil { return errors.New(err.Message) } diff --git a/app/permissions_test.go b/app/permissions_test.go index f39d0b99c9..ac28ee28da 100644 --- a/app/permissions_test.go +++ b/app/permissions_test.go @@ -4,6 +4,7 @@ package app import ( + "context" "encoding/json" "fmt" "strings" @@ -135,17 +136,17 @@ func TestImportPermissions(t *testing.T) { newScheme := results[0] - channelAdminRole, appErr := th.App.GetRoleByName(newScheme.DefaultChannelAdminRole) + channelAdminRole, appErr := th.App.GetRoleByName(context.Background(), newScheme.DefaultChannelAdminRole) if appErr != nil { t.Error(appErr) } - channelUserRole, appErr := th.App.GetRoleByName(newScheme.DefaultChannelUserRole) + channelUserRole, appErr := th.App.GetRoleByName(context.Background(), newScheme.DefaultChannelUserRole) if appErr != nil { t.Error(appErr) } - channelGuestRole, appErr := th.App.GetRoleByName(newScheme.DefaultChannelGuestRole) + channelGuestRole, appErr := th.App.GetRoleByName(context.Background(), newScheme.DefaultChannelGuestRole) if appErr != nil { t.Error(appErr) } @@ -260,7 +261,7 @@ func TestMigration(t *testing.T) { th := Setup(t) defer th.TearDown() - role, err := th.App.GetRoleByName(model.SYSTEM_ADMIN_ROLE_ID) + role, err := th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID) require.Nil(t, err) assert.Contains(t, role.Permissions, model.PERMISSION_CREATE_EMOJIS.Id) assert.Contains(t, role.Permissions, model.PERMISSION_DELETE_EMOJIS.Id) @@ -269,7 +270,7 @@ func TestMigration(t *testing.T) { th.App.ResetPermissionsSystem() - role, err = th.App.GetRoleByName(model.SYSTEM_ADMIN_ROLE_ID) + role, err = th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID) require.Nil(t, err) assert.Contains(t, role.Permissions, model.PERMISSION_CREATE_EMOJIS.Id) assert.Contains(t, role.Permissions, model.PERMISSION_DELETE_EMOJIS.Id) diff --git a/app/role.go b/app/role.go index 4b972f495d..da1269b379 100644 --- a/app/role.go +++ b/app/role.go @@ -4,6 +4,7 @@ package app import ( + "context" "errors" "net/http" "reflect" @@ -38,8 +39,8 @@ func (a *App) GetAllRoles() ([]*model.Role, *model.AppError) { return roles, nil } -func (s *Server) GetRoleByName(name string) (*model.Role, *model.AppError) { - role, nErr := s.Store.Role().GetByName(name) +func (s *Server) GetRoleByName(ctx context.Context, name string) (*model.Role, *model.AppError) { + role, nErr := s.Store.Role().GetByName(ctx, name) if nErr != nil { var nfErr *store.ErrNotFound switch { @@ -58,8 +59,8 @@ func (s *Server) GetRoleByName(name string) (*model.Role, *model.AppError) { return role, nil } -func (a *App) GetRoleByName(name string) (*model.Role, *model.AppError) { - return a.Srv().GetRoleByName(name) +func (a *App) GetRoleByName(ctx context.Context, name string) (*model.Role, *model.AppError) { + return a.Srv().GetRoleByName(ctx, name) } func (a *App) GetRolesByNames(names []string) ([]*model.Role, *model.AppError) { diff --git a/app/role_test.go b/app/role_test.go index 17108747f1..23f339a072 100644 --- a/app/role_test.go +++ b/app/role_test.go @@ -4,6 +4,7 @@ package app import ( + "context" "encoding/csv" "io/ioutil" "os" @@ -42,7 +43,7 @@ func TestGetRolesByNames(t *testing.T) { func TestGetRoleByName(t *testing.T) { testPermissionInheritance(t, func(t *testing.T, th *TestHelper, testData permissionInheritanceTestData) { - actualRole, err := th.App.GetRoleByName(testData.channelRole.Name) + actualRole, err := th.App.GetRoleByName(context.Background(), testData.channelRole.Name) require.Nil(t, err) require.NotNil(t, actualRole) require.Equal(t, testData.channelRole.Name, actualRole.Name) @@ -149,7 +150,7 @@ func testPermissionInheritance(t *testing.T, testCallback func(t *testing.T, th } // add or remove the permission from the higher-scoped scheme - higherScopedRole, testErr := th.App.GetRoleByName(roleNameUnderTest) + higherScopedRole, testErr := th.App.GetRoleByName(context.Background(), roleNameUnderTest) require.Nil(t, testErr) var higherScopedPermissions []string @@ -171,7 +172,7 @@ func testPermissionInheritance(t *testing.T, testCallback func(t *testing.T, th case higherScopedAdmin: channelRoleName = channelScheme.DefaultChannelAdminRole } - channelRole, testErr := th.App.GetRoleByName(channelRoleName) + channelRole, testErr := th.App.GetRoleByName(context.Background(), channelRoleName) require.Nil(t, testErr) // add or remove the permission from the channel scheme diff --git a/app/slashcommands/helper_test.go b/app/slashcommands/helper_test.go index 404488776c..38dc6c8615 100644 --- a/app/slashcommands/helper_test.go +++ b/app/slashcommands/helper_test.go @@ -5,6 +5,7 @@ package slashcommands import ( "bytes" + "context" "io/ioutil" "os" "path/filepath" @@ -398,7 +399,7 @@ func (th *TestHelper) tearDown() { func (th *TestHelper) removePermissionFromRole(permission string, roleName string) { utils.DisableDebugLogForTest() - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) @@ -430,7 +431,7 @@ func (th *TestHelper) removePermissionFromRole(permission string, roleName strin func (th *TestHelper) addPermissionToRole(permission string, roleName string) { utils.DisableDebugLogForTest() - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) diff --git a/app/team.go b/app/team.go index 653d0d64c2..ac498383e3 100644 --- a/app/team.go +++ b/app/team.go @@ -385,7 +385,7 @@ func (a *App) UpdateTeamMemberRoles(teamID string, userID string, newRoles strin for _, roleName := range strings.Fields(newRoles) { var role *model.Role - role, err = a.GetRoleByName(roleName) + role, err = a.GetRoleByName(context.Background(), roleName) if err != nil { err.StatusCode = http.StatusBadRequest return nil, err diff --git a/app/user_test.go b/app/user_test.go index d9b1fa3385..de3466ef02 100644 --- a/app/user_test.go +++ b/app/user_test.go @@ -1023,9 +1023,9 @@ func TestGetViewUsersRestrictions(t *testing.T) { }) t.Run("VIEW_MEMBERS permission granted at team level", func(t *testing.T) { - systemUserRole, err := th.App.GetRoleByName(model.SYSTEM_USER_ROLE_ID) + systemUserRole, err := th.App.GetRoleByName(context.Background(), model.SYSTEM_USER_ROLE_ID) require.Nil(t, err) - teamUserRole, err := th.App.GetRoleByName(model.TEAM_USER_ROLE_ID) + teamUserRole, err := th.App.GetRoleByName(context.Background(), model.TEAM_USER_ROLE_ID) require.Nil(t, err) require.Nil(t, removePermission(systemUserRole, model.PERMISSION_VIEW_MEMBERS.Id)) @@ -1044,7 +1044,7 @@ func TestGetViewUsersRestrictions(t *testing.T) { }) t.Run("VIEW_MEMBERS permission not granted at any level", func(t *testing.T) { - systemUserRole, err := th.App.GetRoleByName(model.SYSTEM_USER_ROLE_ID) + systemUserRole, err := th.App.GetRoleByName(context.Background(), model.SYSTEM_USER_ROLE_ID) require.Nil(t, err) require.Nil(t, removePermission(systemUserRole, model.PERMISSION_VIEW_MEMBERS.Id)) defer addPermission(systemUserRole, model.PERMISSION_VIEW_MEMBERS.Id) @@ -1059,9 +1059,9 @@ func TestGetViewUsersRestrictions(t *testing.T) { }) t.Run("VIEW_MEMBERS permission for some teams but not for others", func(t *testing.T) { - systemUserRole, err := th.App.GetRoleByName(model.SYSTEM_USER_ROLE_ID) + systemUserRole, err := th.App.GetRoleByName(context.Background(), model.SYSTEM_USER_ROLE_ID) require.Nil(t, err) - teamAdminRole, err := th.App.GetRoleByName(model.TEAM_ADMIN_ROLE_ID) + teamAdminRole, err := th.App.GetRoleByName(context.Background(), model.TEAM_ADMIN_ROLE_ID) require.Nil(t, err) require.Nil(t, removePermission(systemUserRole, model.PERMISSION_VIEW_MEMBERS.Id)) diff --git a/services/telemetry/mocks/ServerIface.go b/services/telemetry/mocks/ServerIface.go index 91663cf369..5f3ae19fe4 100644 --- a/services/telemetry/mocks/ServerIface.go +++ b/services/telemetry/mocks/ServerIface.go @@ -5,6 +5,8 @@ package mocks import ( + context "context" + httpservice "github.com/mattermost/mattermost-server/v5/services/httpservice" mock "github.com/stretchr/testify/mock" @@ -50,13 +52,13 @@ func (_m *ServerIface) GetPluginsEnvironment() *plugin.Environment { return r0 } -// GetRoleByName provides a mock function with given fields: _a0 -func (_m *ServerIface) GetRoleByName(_a0 string) (*model.Role, *model.AppError) { - ret := _m.Called(_a0) +// GetRoleByName provides a mock function with given fields: _a0, _a1 +func (_m *ServerIface) GetRoleByName(_a0 context.Context, _a1 string) (*model.Role, *model.AppError) { + ret := _m.Called(_a0, _a1) var r0 *model.Role - if rf, ok := ret.Get(0).(func(string) *model.Role); ok { - r0 = rf(_a0) + if rf, ok := ret.Get(0).(func(context.Context, string) *model.Role); ok { + r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.Role) @@ -64,8 +66,8 @@ func (_m *ServerIface) GetRoleByName(_a0 string) (*model.Role, *model.AppError) } var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string) *model.AppError); ok { - r1 = rf(_a0) + if rf, ok := ret.Get(1).(func(context.Context, string) *model.AppError); ok { + r1 = rf(_a0, _a1) } else { if ret.Get(1) != nil { r1 = ret.Get(1).(*model.AppError) diff --git a/services/telemetry/telemetry.go b/services/telemetry/telemetry.go index 336d2e6b97..339390838f 100644 --- a/services/telemetry/telemetry.go +++ b/services/telemetry/telemetry.go @@ -4,6 +4,7 @@ package telemetry import ( + "context" "os" "path/filepath" "runtime" @@ -86,7 +87,7 @@ type ServerIface interface { HttpService() httpservice.HTTPService GetPluginsEnvironment() *plugin.Environment License() *model.License - GetRoleByName(string) (*model.Role, *model.AppError) + GetRoleByName(context.Context, string) (*model.Role, *model.AppError) GetSchemes(string, int, int) ([]*model.Scheme, *model.AppError) } @@ -947,48 +948,48 @@ func (ts *TelemetryService) trackPermissions() { }) systemAdminPermissions := "" - if role, err := ts.srv.GetRoleByName(model.SYSTEM_ADMIN_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID); err == nil { systemAdminPermissions = strings.Join(role.Permissions, " ") } systemUserPermissions := "" - if role, err := ts.srv.GetRoleByName(model.SYSTEM_USER_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.SYSTEM_USER_ROLE_ID); err == nil { systemUserPermissions = strings.Join(role.Permissions, " ") } teamAdminPermissions := "" - if role, err := ts.srv.GetRoleByName(model.TEAM_ADMIN_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.TEAM_ADMIN_ROLE_ID); err == nil { teamAdminPermissions = strings.Join(role.Permissions, " ") } teamUserPermissions := "" - if role, err := ts.srv.GetRoleByName(model.TEAM_USER_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.TEAM_USER_ROLE_ID); err == nil { teamUserPermissions = strings.Join(role.Permissions, " ") } teamGuestPermissions := "" - if role, err := ts.srv.GetRoleByName(model.TEAM_GUEST_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.TEAM_GUEST_ROLE_ID); err == nil { teamGuestPermissions = strings.Join(role.Permissions, " ") } channelAdminPermissions := "" - if role, err := ts.srv.GetRoleByName(model.CHANNEL_ADMIN_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.CHANNEL_ADMIN_ROLE_ID); err == nil { channelAdminPermissions = strings.Join(role.Permissions, " ") } channelUserPermissions := "" - if role, err := ts.srv.GetRoleByName(model.CHANNEL_USER_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.CHANNEL_USER_ROLE_ID); err == nil { channelUserPermissions = strings.Join(role.Permissions, " ") } channelGuestPermissions := "" - if role, err := ts.srv.GetRoleByName(model.CHANNEL_GUEST_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.CHANNEL_GUEST_ROLE_ID); err == nil { channelGuestPermissions = strings.Join(role.Permissions, " ") } systemManagerPermissions := "" systemManagerPermissionsModified := false - if role, err := ts.srv.GetRoleByName(model.SYSTEM_MANAGER_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.SYSTEM_MANAGER_ROLE_ID); err == nil { systemManagerPermissionsModified = len(model.PermissionsChangedByPatch(role, &model.RolePatch{Permissions: &model.SystemManagerDefaultPermissions})) > 0 systemManagerPermissions = strings.Join(role.Permissions, " ") } @@ -999,7 +1000,7 @@ func (ts *TelemetryService) trackPermissions() { systemUserManagerPermissions := "" systemUserManagerPermissionsModified := false - if role, err := ts.srv.GetRoleByName(model.SYSTEM_USER_MANAGER_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.SYSTEM_USER_MANAGER_ROLE_ID); err == nil { systemUserManagerPermissionsModified = len(model.PermissionsChangedByPatch(role, &model.RolePatch{Permissions: &model.SystemUserManagerDefaultPermissions})) > 0 systemUserManagerPermissions = strings.Join(role.Permissions, " ") } @@ -1010,7 +1011,7 @@ func (ts *TelemetryService) trackPermissions() { systemReadOnlyAdminPermissions := "" systemReadOnlyAdminPermissionsModified := false - if role, err := ts.srv.GetRoleByName(model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), model.SYSTEM_READ_ONLY_ADMIN_ROLE_ID); err == nil { systemReadOnlyAdminPermissionsModified = len(model.PermissionsChangedByPatch(role, &model.RolePatch{Permissions: &model.SystemReadOnlyAdminDefaultPermissions})) > 0 systemReadOnlyAdminPermissions = strings.Join(role.Permissions, " ") } @@ -1042,32 +1043,32 @@ func (ts *TelemetryService) trackPermissions() { if schemes, err := ts.srv.GetSchemes(model.SCHEME_SCOPE_TEAM, 0, 100); err == nil { for _, scheme := range schemes { teamAdminPermissions := "" - if role, err := ts.srv.GetRoleByName(scheme.DefaultTeamAdminRole); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), scheme.DefaultTeamAdminRole); err == nil { teamAdminPermissions = strings.Join(role.Permissions, " ") } teamUserPermissions := "" - if role, err := ts.srv.GetRoleByName(scheme.DefaultTeamUserRole); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), scheme.DefaultTeamUserRole); err == nil { teamUserPermissions = strings.Join(role.Permissions, " ") } teamGuestPermissions := "" - if role, err := ts.srv.GetRoleByName(scheme.DefaultTeamGuestRole); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), scheme.DefaultTeamGuestRole); err == nil { teamGuestPermissions = strings.Join(role.Permissions, " ") } channelAdminPermissions := "" - if role, err := ts.srv.GetRoleByName(scheme.DefaultChannelAdminRole); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), scheme.DefaultChannelAdminRole); err == nil { channelAdminPermissions = strings.Join(role.Permissions, " ") } channelUserPermissions := "" - if role, err := ts.srv.GetRoleByName(scheme.DefaultChannelUserRole); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), scheme.DefaultChannelUserRole); err == nil { channelUserPermissions = strings.Join(role.Permissions, " ") } channelGuestPermissions := "" - if role, err := ts.srv.GetRoleByName(scheme.DefaultChannelGuestRole); err == nil { + if role, err := ts.srv.GetRoleByName(context.Background(), scheme.DefaultChannelGuestRole); err == nil { channelGuestPermissions = strings.Join(role.Permissions, " ") } diff --git a/services/telemetry/telemetry_test.go b/services/telemetry/telemetry_test.go index 5465989b4c..2dee76524a 100644 --- a/services/telemetry/telemetry_test.go +++ b/services/telemetry/telemetry_test.go @@ -4,6 +4,7 @@ package telemetry import ( + "context" "crypto/ecdsa" "encoding/json" "io/ioutil" @@ -55,17 +56,17 @@ func initializeMocks(cfg *model.Config) (*mocks.ServerIface, *storeMocks.Store, serverIfaceMock.On("GetPluginsEnvironment").Return(pluginEnv, nil) serverIfaceMock.On("License").Return(model.NewTestLicense(), nil) - serverIfaceMock.On("GetRoleByName", "system_admin").Return(&model.Role{Permissions: []string{"sa-test1", "sa-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "system_user").Return(&model.Role{Permissions: []string{"su-test1", "su-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "system_user_manager").Return(&model.Role{Permissions: []string{"sum-test1", "sum-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "system_manager").Return(&model.Role{Permissions: []string{"sm-test1", "sm-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "system_read_only_admin").Return(&model.Role{Permissions: []string{"sra-test1", "sra-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "team_admin").Return(&model.Role{Permissions: []string{"ta-test1", "ta-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "team_user").Return(&model.Role{Permissions: []string{"tu-test1", "tu-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "team_guest").Return(&model.Role{Permissions: []string{"tg-test1", "tg-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "channel_admin").Return(&model.Role{Permissions: []string{"ca-test1", "ca-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "channel_user").Return(&model.Role{Permissions: []string{"cu-test1", "cu-test2"}}, nil) - serverIfaceMock.On("GetRoleByName", "channel_guest").Return(&model.Role{Permissions: []string{"cg-test1", "cg-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "system_admin").Return(&model.Role{Permissions: []string{"sa-test1", "sa-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "system_user").Return(&model.Role{Permissions: []string{"su-test1", "su-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "system_user_manager").Return(&model.Role{Permissions: []string{"sum-test1", "sum-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "system_manager").Return(&model.Role{Permissions: []string{"sm-test1", "sm-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "system_read_only_admin").Return(&model.Role{Permissions: []string{"sra-test1", "sra-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "team_admin").Return(&model.Role{Permissions: []string{"ta-test1", "ta-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "team_user").Return(&model.Role{Permissions: []string{"tu-test1", "tu-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "team_guest").Return(&model.Role{Permissions: []string{"tg-test1", "tg-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "channel_admin").Return(&model.Role{Permissions: []string{"ca-test1", "ca-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "channel_user").Return(&model.Role{Permissions: []string{"cu-test1", "cu-test2"}}, nil) + serverIfaceMock.On("GetRoleByName", context.Background(), "channel_guest").Return(&model.Role{Permissions: []string{"cg-test1", "cg-test2"}}, nil) serverIfaceMock.On("GetSchemes", "team", 0, 100).Return([]*model.Scheme{}, nil) serverIfaceMock.On("HttpService").Return(httpservice.MakeHTTPService(configService)) diff --git a/store/localcachelayer/main_test.go b/store/localcachelayer/main_test.go index a4b78a9a22..c9cee272f2 100644 --- a/store/localcachelayer/main_test.go +++ b/store/localcachelayer/main_test.go @@ -44,7 +44,7 @@ func getMockStore() *mocks.Store { mockRolesStore := mocks.RoleStore{} mockRolesStore.On("Save", &fakeRole).Return(&model.Role{}, nil) mockRolesStore.On("Delete", "123").Return(&fakeRole, nil) - mockRolesStore.On("GetByName", "role-name").Return(&fakeRole, nil) + mockRolesStore.On("GetByName", context.Background(), "role-name").Return(&fakeRole, nil) mockRolesStore.On("GetByNames", []string{"role-name"}).Return([]*model.Role{&fakeRole}, nil) mockRolesStore.On("PermanentDeleteAll").Return(nil) mockStore.On("Role").Return(&mockRolesStore) diff --git a/store/localcachelayer/role_layer.go b/store/localcachelayer/role_layer.go index b3ac2dc146..b193f747e8 100644 --- a/store/localcachelayer/role_layer.go +++ b/store/localcachelayer/role_layer.go @@ -4,6 +4,7 @@ package localcachelayer import ( + "context" "sort" "strings" @@ -40,13 +41,13 @@ func (s LocalCacheRoleStore) Save(role *model.Role) (*model.Role, error) { return s.RoleStore.Save(role) } -func (s LocalCacheRoleStore) GetByName(name string) (*model.Role, error) { +func (s LocalCacheRoleStore) GetByName(ctx context.Context, name string) (*model.Role, error) { var role *model.Role if err := s.rootStore.doStandardReadCache(s.rootStore.roleCache, name, &role); err == nil { return role, nil } - role, err := s.RoleStore.GetByName(name) + role, err := s.RoleStore.GetByName(ctx, name) if err != nil { return nil, err } diff --git a/store/localcachelayer/role_layer_test.go b/store/localcachelayer/role_layer_test.go index 27090bf15d..2366ca570c 100644 --- a/store/localcachelayer/role_layer_test.go +++ b/store/localcachelayer/role_layer_test.go @@ -4,6 +4,7 @@ package localcachelayer import ( + "context" "testing" "github.com/stretchr/testify/assert" @@ -27,13 +28,13 @@ func TestRoleStoreCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - role, err := cachedStore.Role().GetByName("role-name") + role, err := cachedStore.Role().GetByName(context.Background(), "role-name") require.NoError(t, err) assert.Equal(t, role, &fakeRole) mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) require.NoError(t, err) assert.Equal(t, role, &fakeRole) - cachedStore.Role().GetByName("role-name") + cachedStore.Role().GetByName(context.Background(), "role-name") mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) }) @@ -43,10 +44,10 @@ func TestRoleStoreCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - cachedStore.Role().GetByName("role-name") + cachedStore.Role().GetByName(context.Background(), "role-name") mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) cachedStore.Role().Save(&fakeRole) - cachedStore.Role().GetByName("role-name") + cachedStore.Role().GetByName(context.Background(), "role-name") mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 2) }) @@ -56,10 +57,10 @@ func TestRoleStoreCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - cachedStore.Role().GetByName("role-name") + cachedStore.Role().GetByName(context.Background(), "role-name") mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) cachedStore.Role().Delete("123") - cachedStore.Role().GetByName("role-name") + cachedStore.Role().GetByName(context.Background(), "role-name") mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 2) }) @@ -69,10 +70,10 @@ func TestRoleStoreCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - cachedStore.Role().GetByName("role-name") + cachedStore.Role().GetByName(context.Background(), "role-name") mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) cachedStore.Role().PermanentDeleteAll() - cachedStore.Role().GetByName("role-name") + cachedStore.Role().GetByName(context.Background(), "role-name") mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 2) }) } diff --git a/store/opentracinglayer/opentracinglayer.go b/store/opentracinglayer/opentracinglayer.go index 545ed01bd0..62151fff30 100644 --- a/store/opentracinglayer/opentracinglayer.go +++ b/store/opentracinglayer/opentracinglayer.go @@ -6559,7 +6559,7 @@ func (s *OpenTracingLayerRoleStore) GetAll() ([]*model.Role, error) { return result, err } -func (s *OpenTracingLayerRoleStore) GetByName(name string) (*model.Role, error) { +func (s *OpenTracingLayerRoleStore) GetByName(ctx context.Context, name string) (*model.Role, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "RoleStore.GetByName") s.Root.Store.SetContext(newCtx) @@ -6568,7 +6568,7 @@ func (s *OpenTracingLayerRoleStore) GetByName(name string) (*model.Role, error) }() defer span.Finish() - result, err := s.RoleStore.GetByName(name) + result, err := s.RoleStore.GetByName(ctx, name) if err != nil { span.LogFields(spanlog.Error(err)) ext.Error.Set(span, true) diff --git a/store/retrylayer/retrylayer.go b/store/retrylayer/retrylayer.go index aea4df3b78..a3bd12d3b7 100644 --- a/store/retrylayer/retrylayer.go +++ b/store/retrylayer/retrylayer.go @@ -7110,11 +7110,11 @@ func (s *RetryLayerRoleStore) GetAll() ([]*model.Role, error) { } -func (s *RetryLayerRoleStore) GetByName(name string) (*model.Role, error) { +func (s *RetryLayerRoleStore) GetByName(ctx context.Context, name string) (*model.Role, error) { tries := 0 for { - result, err := s.RoleStore.GetByName(name) + result, err := s.RoleStore.GetByName(ctx, name) if err == nil { return result, nil } diff --git a/store/sqlstore/role_store.go b/store/sqlstore/role_store.go index e2791b3892..ad25cd7f58 100644 --- a/store/sqlstore/role_store.go +++ b/store/sqlstore/role_store.go @@ -4,6 +4,7 @@ package sqlstore import ( + "context" "database/sql" "fmt" "strings" @@ -175,10 +176,9 @@ func (s *SqlRoleStore) GetAll() ([]*model.Role, error) { return roles, nil } -func (s *SqlRoleStore) GetByName(name string) (*model.Role, error) { +func (s *SqlRoleStore) GetByName(ctx context.Context, name string) (*model.Role, error) { var dbRole Role - - if err := s.GetReplica().SelectOne(&dbRole, "SELECT * from Roles WHERE Name = :Name", map[string]interface{}{"Name": name}); err != nil { + if err := s.DBFromContext(ctx).SelectOne(&dbRole, "SELECT * from Roles WHERE Name = :Name", map[string]interface{}{"Name": name}); err != nil { if err == sql.ErrNoRows { return nil, store.NewErrNotFound("Role", fmt.Sprintf("name=%s", name)) } diff --git a/store/sqlstore/scheme_store.go b/store/sqlstore/scheme_store.go index b97f8cb51d..d42beeea1b 100644 --- a/store/sqlstore/scheme_store.go +++ b/store/sqlstore/scheme_store.go @@ -269,7 +269,7 @@ func (s *SqlSchemeStore) GetByName(schemeName string) (*model.Scheme, error) { func (s *SqlSchemeStore) Delete(schemeId string) (*model.Scheme, error) { // Get the scheme var scheme model.Scheme - if err := s.GetReplica().SelectOne(&scheme, "SELECT * from Schemes WHERE Id = :Id", map[string]interface{}{"Id": schemeId}); err != nil { + if err := s.GetMaster().SelectOne(&scheme, "SELECT * from Schemes WHERE Id = :Id", map[string]interface{}{"Id": schemeId}); err != nil { if err == sql.ErrNoRows { return nil, store.NewErrNotFound("Scheme", fmt.Sprintf("schemeId=%s", schemeId)) } diff --git a/store/store.go b/store/store.go index 14ee7fa9e9..b0659e96fb 100644 --- a/store/store.go +++ b/store/store.go @@ -686,7 +686,7 @@ type RoleStore interface { Save(role *model.Role) (*model.Role, error) Get(roleID string) (*model.Role, error) GetAll() ([]*model.Role, error) - GetByName(name string) (*model.Role, error) + GetByName(ctx context.Context, name string) (*model.Role, error) GetByNames(names []string) ([]*model.Role, error) Delete(roleID string) (*model.Role, error) PermanentDeleteAll() error diff --git a/store/storetest/mocks/RoleStore.go b/store/storetest/mocks/RoleStore.go index cd4c69684f..622cef22cc 100644 --- a/store/storetest/mocks/RoleStore.go +++ b/store/storetest/mocks/RoleStore.go @@ -5,6 +5,8 @@ package mocks import ( + context "context" + model "github.com/mattermost/mattermost-server/v5/model" mock "github.com/stretchr/testify/mock" ) @@ -152,13 +154,13 @@ func (_m *RoleStore) GetAll() ([]*model.Role, error) { return r0, r1 } -// GetByName provides a mock function with given fields: name -func (_m *RoleStore) GetByName(name string) (*model.Role, error) { - ret := _m.Called(name) +// GetByName provides a mock function with given fields: ctx, name +func (_m *RoleStore) GetByName(ctx context.Context, name string) (*model.Role, error) { + ret := _m.Called(ctx, name) var r0 *model.Role - if rf, ok := ret.Get(0).(func(string) *model.Role); ok { - r0 = rf(name) + if rf, ok := ret.Get(0).(func(context.Context, string) *model.Role); ok { + r0 = rf(ctx, name) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.Role) @@ -166,8 +168,8 @@ func (_m *RoleStore) GetByName(name string) (*model.Role, error) { } var r1 error - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(name) + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, name) } else { r1 = ret.Error(1) } diff --git a/store/storetest/role_store.go b/store/storetest/role_store.go index b7ff31f497..8fb4cdd107 100644 --- a/store/storetest/role_store.go +++ b/store/storetest/role_store.go @@ -4,6 +4,7 @@ package storetest import ( + "context" "fmt" "testing" @@ -191,7 +192,7 @@ func testRoleStoreGetByName(t *testing.T, ss store.Store) { assert.Len(t, d1.Id, 26) // Get a valid role - d2, err := ss.Role().GetByName(d1.Name) + d2, err := ss.Role().GetByName(context.Background(), d1.Name) assert.NoError(t, err) assert.Equal(t, d1.Id, d2.Id) assert.Equal(t, r1.Name, d2.Name) @@ -201,7 +202,7 @@ func testRoleStoreGetByName(t *testing.T, ss store.Store) { assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged) // Get an invalid role - _, err = ss.Role().GetByName(model.NewId()) + _, err = ss.Role().GetByName(context.Background(), model.NewId()) assert.Error(t, err) } @@ -309,7 +310,7 @@ func testRoleStoreDelete(t *testing.T, ss store.Store) { assert.NoError(t, err) assert.NotZero(t, d2.DeleteAt) - d3, err := ss.Role().GetByName(d1.Name) + d3, err := ss.Role().GetByName(context.Background(), d1.Name) assert.NoError(t, err) assert.NotZero(t, d3.DeleteAt) @@ -559,13 +560,13 @@ func testRoleStoreChannelHigherScopedPermissionsBlankTeamSchemeChannelGuest(t *t require.NoError(t, nErr) defer ss.Channel().Delete(channel.Id, 0) - channelSchemeUserRole, err := ss.Role().GetByName(channelScheme.DefaultChannelUserRole) + channelSchemeUserRole, err := ss.Role().GetByName(context.Background(), channelScheme.DefaultChannelUserRole) require.NoError(t, err) channelSchemeUserRole.Permissions = []string{} _, err = ss.Role().Save(channelSchemeUserRole) require.NoError(t, err) - teamSchemeUserRole, err := ss.Role().GetByName(teamScheme.DefaultChannelUserRole) + teamSchemeUserRole, err := ss.Role().GetByName(context.Background(), teamScheme.DefaultChannelUserRole) require.NoError(t, err) teamSchemeUserRole.Permissions = []string{model.PERMISSION_UPLOAD_FILE.Id} _, err = ss.Role().Save(teamSchemeUserRole) diff --git a/store/storetest/scheme_store.go b/store/storetest/scheme_store.go index f5f7079df5..52a1d80239 100644 --- a/store/storetest/scheme_store.go +++ b/store/storetest/scheme_store.go @@ -4,6 +4,7 @@ package storetest import ( + "context" "testing" "github.com/stretchr/testify/assert" @@ -108,32 +109,32 @@ func testSchemeStoreSave(t *testing.T, ss store.Store) { assert.Len(t, d1.DefaultChannelGuestRole, 26) // Check the default roles were created correctly. - role1, err := ss.Role().GetByName(d1.DefaultTeamAdminRole) + role1, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamAdminRole) assert.NoError(t, err) assert.Equal(t, role1.Permissions, []string{"delete_others_posts"}) assert.True(t, role1.SchemeManaged) - role2, err := ss.Role().GetByName(d1.DefaultTeamUserRole) + role2, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamUserRole) assert.NoError(t, err) assert.Equal(t, role2.Permissions, []string{"view_team", "add_user_to_team"}) assert.True(t, role2.SchemeManaged) - role3, err := ss.Role().GetByName(d1.DefaultChannelAdminRole) + role3, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelAdminRole) assert.NoError(t, err) assert.Equal(t, role3.Permissions, []string{"manage_public_channel_members", "manage_private_channel_members"}) assert.True(t, role3.SchemeManaged) - role4, err := ss.Role().GetByName(d1.DefaultChannelUserRole) + role4, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelUserRole) assert.NoError(t, err) assert.Equal(t, role4.Permissions, []string{"read_channel", "create_post"}) assert.True(t, role4.SchemeManaged) - role5, err := ss.Role().GetByName(d1.DefaultTeamGuestRole) + role5, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamGuestRole) assert.NoError(t, err) assert.Equal(t, role5.Permissions, []string{"view_team"}) assert.True(t, role5.SchemeManaged) - role6, err := ss.Role().GetByName(d1.DefaultChannelGuestRole) + role6, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelGuestRole) assert.NoError(t, err) assert.Equal(t, role6.Permissions, []string{"read_channel", "create_post"}) assert.True(t, role6.SchemeManaged) @@ -336,32 +337,32 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) { assert.Len(t, d1.DefaultChannelGuestRole, 26) // Check the default roles were created correctly. - role1, err := ss.Role().GetByName(d1.DefaultTeamAdminRole) + role1, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamAdminRole) assert.NoError(t, err) assert.Equal(t, role1.Permissions, []string{"delete_others_posts"}) assert.True(t, role1.SchemeManaged) - role2, err := ss.Role().GetByName(d1.DefaultTeamUserRole) + role2, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamUserRole) assert.NoError(t, err) assert.Equal(t, role2.Permissions, []string{"view_team", "add_user_to_team"}) assert.True(t, role2.SchemeManaged) - role3, err := ss.Role().GetByName(d1.DefaultChannelAdminRole) + role3, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelAdminRole) assert.NoError(t, err) assert.Equal(t, role3.Permissions, []string{"manage_public_channel_members", "manage_private_channel_members"}) assert.True(t, role3.SchemeManaged) - role4, err := ss.Role().GetByName(d1.DefaultChannelUserRole) + role4, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelUserRole) assert.NoError(t, err) assert.Equal(t, role4.Permissions, []string{"read_channel", "create_post"}) assert.True(t, role4.SchemeManaged) - role5, err := ss.Role().GetByName(d1.DefaultTeamGuestRole) + role5, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamGuestRole) assert.NoError(t, err) assert.Equal(t, role5.Permissions, []string{"view_team"}) assert.True(t, role5.SchemeManaged) - role6, err := ss.Role().GetByName(d1.DefaultChannelGuestRole) + role6, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelGuestRole) assert.NoError(t, err) assert.Equal(t, role6.Permissions, []string{"read_channel", "create_post"}) assert.True(t, role6.SchemeManaged) @@ -372,27 +373,27 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) { assert.NotZero(t, d2.DeleteAt) // Check that the roles are deleted too. - role7, err := ss.Role().GetByName(d1.DefaultTeamAdminRole) + role7, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamAdminRole) assert.NoError(t, err) assert.NotZero(t, role7.DeleteAt) - role8, err := ss.Role().GetByName(d1.DefaultTeamUserRole) + role8, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamUserRole) assert.NoError(t, err) assert.NotZero(t, role8.DeleteAt) - role9, err := ss.Role().GetByName(d1.DefaultChannelAdminRole) + role9, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelAdminRole) assert.NoError(t, err) assert.NotZero(t, role9.DeleteAt) - role10, err := ss.Role().GetByName(d1.DefaultChannelUserRole) + role10, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelUserRole) assert.NoError(t, err) assert.NotZero(t, role10.DeleteAt) - role11, err := ss.Role().GetByName(d1.DefaultTeamGuestRole) + role11, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamGuestRole) assert.NoError(t, err) assert.NotZero(t, role11.DeleteAt) - role12, err := ss.Role().GetByName(d1.DefaultChannelGuestRole) + role12, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelGuestRole) assert.NoError(t, err) assert.NotZero(t, role12.DeleteAt) @@ -538,10 +539,10 @@ func testCountWithoutPermission(t *testing.T, ss store.Store) { getRoles := func(scheme *model.Scheme) (channelUser, channelGuest *model.Role) { var err error - channelUser, err = ss.Role().GetByName(scheme.DefaultChannelUserRole) + channelUser, err = ss.Role().GetByName(context.Background(), scheme.DefaultChannelUserRole) require.NoError(t, err) require.NotNil(t, channelUser) - channelGuest, err = ss.Role().GetByName(scheme.DefaultChannelGuestRole) + channelGuest, err = ss.Role().GetByName(context.Background(), scheme.DefaultChannelGuestRole) require.NoError(t, err) require.NotNil(t, channelGuest) return diff --git a/store/timerlayer/timerlayer.go b/store/timerlayer/timerlayer.go index e362268d3a..bd158327eb 100644 --- a/store/timerlayer/timerlayer.go +++ b/store/timerlayer/timerlayer.go @@ -5929,10 +5929,10 @@ func (s *TimerLayerRoleStore) GetAll() ([]*model.Role, error) { return result, err } -func (s *TimerLayerRoleStore) GetByName(name string) (*model.Role, error) { +func (s *TimerLayerRoleStore) GetByName(ctx context.Context, name string) (*model.Role, error) { start := timemodule.Now() - result, err := s.RoleStore.GetByName(name) + result, err := s.RoleStore.GetByName(ctx, name) elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second) if s.Root.Metrics != nil { diff --git a/web/oauth_test.go b/web/oauth_test.go index b66974a42b..e42517f371 100644 --- a/web/oauth_test.go +++ b/web/oauth_test.go @@ -5,6 +5,7 @@ package web import ( "bytes" + "context" "encoding/base64" "io" "io/ioutil" @@ -677,7 +678,7 @@ func (th *TestHelper) SaveDefaultRolePermissions() map[string][]string { "channel_user", "channel_admin", } { - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) @@ -694,7 +695,7 @@ func (th *TestHelper) RestoreDefaultRolePermissions(data map[string][]string) { utils.DisableDebugLogForTest() for roleName, permissions := range data { - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1) @@ -751,7 +752,7 @@ func (th *TestHelper) RestoreDefaultRolePermissions(data map[string][]string) { func (th *TestHelper) AddPermissionToRole(permission string, roleName string) { utils.DisableDebugLogForTest() - role, err1 := th.App.GetRoleByName(roleName) + role, err1 := th.App.GetRoleByName(context.Background(), roleName) if err1 != nil { utils.EnableDebugLogForTest() panic(err1)