Merge branch 'MM-45118_my_top_dms' of github.com:plant99/mattermost-server into top-dms-clean

Этот коммит содержится в:
Shivashis Padhi
2022-08-01 14:04:53 +05:30
родитель 61a716a98c 8a532c0b8c
Коммит 39ce85799a
95 изменённых файлов: 1097 добавлений и 999 удалений

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

@@ -322,8 +322,8 @@ func SetupWithStoreMock(tb testing.TB) *TestHelper {
return th return th
} }
func SetupEnterpriseWithStoreMock(tb testing.TB, options ...app.Option) *TestHelper { func SetupEnterpriseWithStoreMock(tb testing.TB) *TestHelper {
th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, true, false, nil, options) th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, true, false, nil, nil)
statusMock := mocks.StatusStore{} statusMock := mocks.StatusStore{}
statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil) statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil)
statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.StatusOnline}, nil) statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.StatusOnline}, nil)
@@ -401,17 +401,17 @@ func (th *TestHelper) InitLogin() *TestHelper {
// create users once and cache them because password hashing is slow // create users once and cache them because password hashing is slow
initBasicOnce.Do(func() { initBasicOnce.Do(func() {
th.SystemAdminUser = th.CreateUser() th.SystemAdminUser = th.CreateUser()
th.App.UpdateUserRoles(th.SystemAdminUser.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false) th.App.UpdateUserRoles(th.Context, th.SystemAdminUser.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id) th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id)
userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy() userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy()
th.SystemManagerUser = th.CreateUser() th.SystemManagerUser = th.CreateUser()
th.App.UpdateUserRoles(th.SystemManagerUser.Id, model.SystemUserRoleId+" "+model.SystemManagerRoleId, false) th.App.UpdateUserRoles(th.Context, th.SystemManagerUser.Id, model.SystemUserRoleId+" "+model.SystemManagerRoleId, false)
th.SystemManagerUser, _ = th.App.GetUser(th.SystemManagerUser.Id) th.SystemManagerUser, _ = th.App.GetUser(th.SystemManagerUser.Id)
userCache.SystemManagerUser = th.SystemManagerUser.DeepCopy() userCache.SystemManagerUser = th.SystemManagerUser.DeepCopy()
th.TeamAdminUser = th.CreateUser() th.TeamAdminUser = th.CreateUser()
th.App.UpdateUserRoles(th.TeamAdminUser.Id, model.SystemUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.TeamAdminUser.Id, model.SystemUserRoleId, false)
th.TeamAdminUser, _ = th.App.GetUser(th.TeamAdminUser.Id) th.TeamAdminUser, _ = th.App.GetUser(th.TeamAdminUser.Id)
userCache.TeamAdminUser = th.TeamAdminUser.DeepCopy() userCache.TeamAdminUser = th.TeamAdminUser.DeepCopy()
@@ -476,7 +476,7 @@ func (th *TestHelper) InitBasic() *TestHelper {
th.App.AddUserToChannel(th.Context, th.BasicUser2, th.BasicPrivateChannel, false) th.App.AddUserToChannel(th.Context, th.BasicUser2, th.BasicPrivateChannel, false)
th.App.AddUserToChannel(th.Context, th.BasicUser, th.BasicDeletedChannel, false) th.App.AddUserToChannel(th.Context, th.BasicUser, th.BasicDeletedChannel, false)
th.App.AddUserToChannel(th.Context, th.BasicUser2, th.BasicDeletedChannel, false) th.App.AddUserToChannel(th.Context, th.BasicUser2, th.BasicDeletedChannel, false)
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId, false)
th.Client.DeleteChannel(th.BasicDeletedChannel.Id) th.Client.DeleteChannel(th.BasicDeletedChannel.Id)
th.LoginBasic() th.LoginBasic()
th.Group = th.CreateGroup() th.Group = th.CreateGroup()

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

@@ -28,7 +28,7 @@ func createBot(c *Context, w http.ResponseWriter, r *http.Request) {
var botPatch *model.BotPatch var botPatch *model.BotPatch
err := json.NewDecoder(r.Body).Decode(&botPatch) err := json.NewDecoder(r.Body).Decode(&botPatch)
if err != nil { if err != nil {
c.SetInvalidParam("bot") c.SetInvalidParamWithErr("bot", err)
return return
} }
@@ -70,7 +70,7 @@ func createBot(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(createdBot); err != nil { if err := json.NewEncoder(w).Encode(createdBot); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -84,7 +84,7 @@ func patchBot(c *Context, w http.ResponseWriter, r *http.Request) {
var botPatch *model.BotPatch var botPatch *model.BotPatch
err := json.NewDecoder(r.Body).Decode(&botPatch) err := json.NewDecoder(r.Body).Decode(&botPatch)
if err != nil { if err != nil {
c.SetInvalidParam("bot") c.SetInvalidParamWithErr("bot", err)
return return
} }
@@ -109,7 +109,7 @@ func patchBot(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.AddEventObjectType("bot") auditRec.AddEventObjectType("bot")
if err := json.NewEncoder(w).Encode(updatedBot); err != nil { if err := json.NewEncoder(w).Encode(updatedBot); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -150,7 +150,7 @@ func getBot(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(bot); err != nil { if err := json.NewEncoder(w).Encode(bot); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -268,7 +268,7 @@ func assignBot(c *Context, w http.ResponseWriter, _ *http.Request) {
auditRec.AddEventObjectType("bot") auditRec.AddEventObjectType("bot")
if err := json.NewEncoder(w).Encode(bot); err != nil { if err := json.NewEncoder(w).Encode(bot); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -287,7 +287,7 @@ func convertBotToUser(c *Context, w http.ResponseWriter, r *http.Request) {
var userPatch model.UserPatch var userPatch model.UserPatch
jsonErr := json.NewDecoder(r.Body).Decode(&userPatch) jsonErr := json.NewDecoder(r.Body).Decode(&userPatch)
if jsonErr != nil || userPatch.Password == nil || *userPatch.Password == "" { if jsonErr != nil || userPatch.Password == nil || *userPatch.Password == "" {
c.SetInvalidParam("userPatch") c.SetInvalidParamWithErr("userPatch", jsonErr)
return return
} }
@@ -304,7 +304,7 @@ func convertBotToUser(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
user, err := c.App.ConvertBotToUser(bot, &userPatch, systemAdmin) user, err := c.App.ConvertBotToUser(c.AppContext, bot, &userPatch, systemAdmin)
if err != nil { if err != nil {
c.Err = err c.Err = err
return return
@@ -315,6 +315,6 @@ func convertBotToUser(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.AddEventObjectType("user") auditRec.AddEventObjectType("user")
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -37,7 +37,7 @@ func TestCreateBot(t *testing.T) {
defer th.TearDown() defer th.TearDown()
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.Config().ServiceSettings.EnableBotAccountCreation = model.NewBool(false) th.App.Config().ServiceSettings.EnableBotAccountCreation = model.NewBool(false)
_, _, err := th.Client.CreateBot(&model.Bot{ _, _, err := th.Client.CreateBot(&model.Bot{
@@ -55,7 +55,7 @@ func TestCreateBot(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -81,7 +81,7 @@ func TestCreateBot(t *testing.T) {
defer th.TearDown() defer th.TearDown()
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -106,7 +106,7 @@ func TestCreateBot(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionEditOtherUsers.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionEditOtherUsers.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
bot, resp, err := th.Client.CreateBot(&model.Bot{ bot, resp, err := th.Client.CreateBot(&model.Bot{
Username: GenerateTestUsername(), Username: GenerateTestUsername(),
@@ -116,7 +116,7 @@ func TestCreateBot(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
CheckCreatedStatus(t, resp) CheckCreatedStatus(t, resp)
defer th.App.PermanentDeleteBot(bot.UserId) defer th.App.PermanentDeleteBot(bot.UserId)
th.App.UpdateUserRoles(bot.UserId, model.TeamUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, bot.UserId, model.TeamUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
rtoken, _, err := th.Client.CreateUserAccessToken(bot.UserId, "test token") rtoken, _, err := th.Client.CreateUserAccessToken(bot.UserId, "test token")
require.NoError(t, err) require.NoError(t, err)
@@ -152,7 +152,7 @@ func TestPatchBot(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -234,7 +234,7 @@ func TestPatchBot(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -258,7 +258,7 @@ func TestPatchBot(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -291,7 +291,7 @@ func TestPatchBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageRoles.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageRoles.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
resp, err = th.Client.UpdateUserRoles(createdBot.UserId, model.SystemUserRoleId) resp, err = th.Client.UpdateUserRoles(createdBot.UserId, model.SystemUserRoleId)
require.NoError(t, err) require.NoError(t, err)
@@ -310,7 +310,7 @@ func TestPatchBot(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -341,7 +341,7 @@ func TestPatchBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -372,7 +372,7 @@ func TestPatchBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -408,7 +408,7 @@ func TestPatchBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -444,7 +444,7 @@ func TestPatchBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -513,7 +513,7 @@ func TestGetBot(t *testing.T) {
CheckOKStatus(t, resp) CheckOKStatus(t, resp)
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -533,7 +533,7 @@ func TestGetBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
_, resp, err := th.Client.GetBot(model.NewId(), "") _, resp, err := th.Client.GetBot(model.NewId(), "")
require.Error(t, err) require.Error(t, err)
@@ -545,7 +545,7 @@ func TestGetBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
bot, resp, err := th.Client.GetBot(bot1.UserId, "") bot, resp, err := th.Client.GetBot(bot1.UserId, "")
require.NoError(t, err) require.NoError(t, err)
@@ -561,7 +561,7 @@ func TestGetBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
bot, resp, err := th.Client.GetBot(bot2.UserId, "") bot, resp, err := th.Client.GetBot(bot2.UserId, "")
require.NoError(t, err) require.NoError(t, err)
@@ -579,7 +579,7 @@ func TestGetBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
_, _, err := th.Client.GetBot(bot1.UserId, "") _, _, err := th.Client.GetBot(bot1.UserId, "")
CheckErrorID(t, err, "store.sql_bot.get.missing.app_error") CheckErrorID(t, err, "store.sql_bot.get.missing.app_error")
@@ -591,7 +591,7 @@ func TestGetBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
_, _, err := th.Client.GetBot(myBot.UserId, "") _, _, err := th.Client.GetBot(myBot.UserId, "")
CheckErrorID(t, err, "store.sql_bot.get.missing.app_error") CheckErrorID(t, err, "store.sql_bot.get.missing.app_error")
@@ -602,7 +602,7 @@ func TestGetBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
_, resp, err := th.Client.GetBot(deletedBot.UserId, "") _, resp, err := th.Client.GetBot(deletedBot.UserId, "")
require.Error(t, err) require.Error(t, err)
@@ -614,7 +614,7 @@ func TestGetBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
bot, resp, err := th.Client.GetBotIncludeDeleted(deletedBot.UserId, "") bot, resp, err := th.Client.GetBotIncludeDeleted(deletedBot.UserId, "")
require.NoError(t, err) require.NoError(t, err)
@@ -687,7 +687,7 @@ func TestGetBots(t *testing.T) {
CheckOKStatus(t, resp) CheckOKStatus(t, resp)
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser2.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser2.Id, model.TeamUserRoleId, false)
th.LoginBasic2() th.LoginBasic2()
orphanedBot, resp, err := th.Client.CreateBot(&model.Bot{ orphanedBot, resp, err := th.Client.CreateBot(&model.Bot{
Username: GenerateTestUsername(), Username: GenerateTestUsername(),
@@ -710,7 +710,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{bot1, bot2, bot3, orphanedBot} expectedBotList := []*model.Bot{bot1, bot2, bot3, orphanedBot}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -730,7 +730,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{bot1} expectedBotList := []*model.Bot{bot1}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -750,7 +750,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{bot3, orphanedBot} expectedBotList := []*model.Bot{bot3, orphanedBot}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -770,7 +770,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{} expectedBotList := []*model.Bot{}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -790,7 +790,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{bot1, deletedBot1, bot2, bot3, deletedBot2, orphanedBot} expectedBotList := []*model.Bot{bot1, deletedBot1, bot2, bot3, deletedBot2, orphanedBot}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -810,7 +810,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{bot1} expectedBotList := []*model.Bot{bot1}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -830,7 +830,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{bot2, bot3} expectedBotList := []*model.Bot{bot2, bot3}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -850,7 +850,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{deletedBot2, orphanedBot} expectedBotList := []*model.Bot{deletedBot2, orphanedBot}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -870,7 +870,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
expectedBotList := []*model.Bot{orphanedBot} expectedBotList := []*model.Bot{orphanedBot}
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
@@ -891,7 +891,7 @@ func TestGetBots(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
_, _, err := th.Client.GetBots(0, 10, "") _, _, err := th.Client.GetBots(0, 10, "")
CheckErrorID(t, err, "api.context.permissions.app_error") CheckErrorID(t, err, "api.context.permissions.app_error")
@@ -916,7 +916,7 @@ func TestDisableBot(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -942,7 +942,7 @@ func TestDisableBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -968,7 +968,7 @@ func TestDisableBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -1021,7 +1021,7 @@ func TestEnableBot(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -1051,7 +1051,7 @@ func TestEnableBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -1081,7 +1081,7 @@ func TestEnableBot(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -1288,7 +1288,7 @@ func TestConvertBotToUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })

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

@@ -82,7 +82,7 @@ func createChannel(c *Context, w http.ResponseWriter, r *http.Request) {
var channel *model.Channel var channel *model.Channel
err := json.NewDecoder(r.Body).Decode(&channel) err := json.NewDecoder(r.Body).Decode(&channel)
if err != nil { if err != nil {
c.SetInvalidParam("channel") c.SetInvalidParamWithErr("channel", err)
return return
} }
@@ -126,7 +126,7 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) {
var channel *model.Channel var channel *model.Channel
err := json.NewDecoder(r.Body).Decode(&channel) err := json.NewDecoder(r.Body).Decode(&channel)
if err != nil { if err != nil {
c.SetInvalidParam("channel") c.SetInvalidParamWithErr("channel", err)
return return
} }
@@ -303,7 +303,7 @@ func patchChannel(c *Context, w http.ResponseWriter, r *http.Request) {
var patch *model.ChannelPatch var patch *model.ChannelPatch
err := json.NewDecoder(r.Body).Decode(&patch) err := json.NewDecoder(r.Body).Decode(&patch)
if err != nil { if err != nil {
c.SetInvalidParam("channel") c.SetInvalidParamWithErr("channel", err)
return return
} }
@@ -482,7 +482,7 @@ func searchGroupChannels(c *Context, w http.ResponseWriter, r *http.Request) {
var props *model.ChannelSearch var props *model.ChannelSearch
err := json.NewDecoder(r.Body).Decode(&props) err := json.NewDecoder(r.Body).Decode(&props)
if err != nil { if err != nil {
c.SetInvalidParam("channel_search") c.SetInvalidParamWithErr("channel_search", err)
return return
} }
@@ -1057,7 +1057,7 @@ func searchChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) {
var props *model.ChannelSearch var props *model.ChannelSearch
err := json.NewDecoder(r.Body).Decode(&props) err := json.NewDecoder(r.Body).Decode(&props)
if err != nil { if err != nil {
c.SetInvalidParam("channel_search") c.SetInvalidParamWithErr("channel_search", err)
return return
} }
@@ -1096,7 +1096,7 @@ func searchArchivedChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Re
var props *model.ChannelSearch var props *model.ChannelSearch
err := json.NewDecoder(r.Body).Decode(&props) err := json.NewDecoder(r.Body).Decode(&props)
if err != nil { if err != nil {
c.SetInvalidParam("channel_search") c.SetInvalidParamWithErr("channel_search", err)
return return
} }
@@ -1130,7 +1130,7 @@ func searchAllChannels(c *Context, w http.ResponseWriter, r *http.Request) {
var props *model.ChannelSearch var props *model.ChannelSearch
err := json.NewDecoder(r.Body).Decode(&props) err := json.NewDecoder(r.Body).Decode(&props)
if err != nil { if err != nil {
c.SetInvalidParam("channel_search") c.SetInvalidParamWithErr("channel_search", err)
return return
} }
@@ -1470,7 +1470,7 @@ func viewChannel(c *Context, w http.ResponseWriter, r *http.Request) {
var view model.ChannelView var view model.ChannelView
if jsonErr := json.NewDecoder(r.Body).Decode(&view); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&view); jsonErr != nil {
c.SetInvalidParam("channel_view") c.SetInvalidParamWithErr("channel_view", jsonErr)
return return
} }
@@ -1547,7 +1547,7 @@ func updateChannelMemberSchemeRoles(c *Context, w http.ResponseWriter, r *http.R
var schemeRoles model.SchemeRoles var schemeRoles model.SchemeRoles
if jsonErr := json.NewDecoder(r.Body).Decode(&schemeRoles); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&schemeRoles); jsonErr != nil {
c.SetInvalidParam("scheme_roles") c.SetInvalidParamWithErr("scheme_roles", jsonErr)
return return
} }
@@ -1810,7 +1810,7 @@ func updateChannelScheme(c *Context, w http.ResponseWriter, r *http.Request) {
var p model.SchemeIDPatch var p model.SchemeIDPatch
if jsonErr := json.NewDecoder(r.Body).Decode(&p); jsonErr != nil || p.SchemeID == nil || !model.IsValidId(*p.SchemeID) { if jsonErr := json.NewDecoder(r.Body).Decode(&p); jsonErr != nil || p.SchemeID == nil || !model.IsValidId(*p.SchemeID) {
c.SetInvalidParam("scheme_id") c.SetInvalidParamWithErr("scheme_id", jsonErr)
return return
} }
schemeID := p.SchemeID schemeID := p.SchemeID
@@ -2013,7 +2013,7 @@ func patchChannelModerations(c *Context, w http.ResponseWriter, r *http.Request)
var channelModerationsPatch []*model.ChannelModerationPatch var channelModerationsPatch []*model.ChannelModerationPatch
err := json.NewDecoder(r.Body).Decode(&channelModerationsPatch) err := json.NewDecoder(r.Body).Decode(&channelModerationsPatch)
if err != nil { if err != nil {
c.Err = model.NewAppError("Api4.patchChannelModerations", "api.marshal_error", nil, err.Error(), http.StatusInternalServerError) c.Err = model.NewAppError("Api4.patchChannelModerations", "api.marshal_error", nil, "", http.StatusInternalServerError).Wrap(err)
return return
} }

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

@@ -55,7 +55,7 @@ func createCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req
var categoryCreateRequest model.SidebarCategoryWithChannels var categoryCreateRequest model.SidebarCategoryWithChannels
err := json.NewDecoder(r.Body).Decode(&categoryCreateRequest) err := json.NewDecoder(r.Body).Decode(&categoryCreateRequest)
if err != nil || c.Params.UserId != categoryCreateRequest.UserId || c.Params.TeamId != categoryCreateRequest.TeamId { if err != nil || c.Params.UserId != categoryCreateRequest.UserId || c.Params.TeamId != categoryCreateRequest.TeamId {
c.SetInvalidParam("category") c.SetInvalidParamWithErr("category", err)
return return
} }
@@ -177,7 +177,7 @@ func updateCategoriesForTeamForUser(c *Context, w http.ResponseWriter, r *http.R
var categoriesUpdateRequest []*model.SidebarCategoryWithChannels var categoriesUpdateRequest []*model.SidebarCategoryWithChannels
err := json.NewDecoder(r.Body).Decode(&categoriesUpdateRequest) err := json.NewDecoder(r.Body).Decode(&categoriesUpdateRequest)
if err != nil { if err != nil {
c.SetInvalidParam("category") c.SetInvalidParamWithErr("category", err)
return return
} }
@@ -278,7 +278,7 @@ func updateCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req
var categoryUpdateRequest model.SidebarCategoryWithChannels var categoryUpdateRequest model.SidebarCategoryWithChannels
err := json.NewDecoder(r.Body).Decode(&categoryUpdateRequest) err := json.NewDecoder(r.Body).Decode(&categoryUpdateRequest)
if err != nil || categoryUpdateRequest.TeamId != c.Params.TeamId || categoryUpdateRequest.UserId != c.Params.UserId { if err != nil || categoryUpdateRequest.TeamId != c.Params.TeamId || categoryUpdateRequest.UserId != c.Params.UserId {
c.SetInvalidParam("category") c.SetInvalidParamWithErr("category", err)
return return
} }

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

@@ -41,7 +41,7 @@ func localCreateChannel(c *Context, w http.ResponseWriter, r *http.Request) {
var channel *model.Channel var channel *model.Channel
err := json.NewDecoder(r.Body).Decode(&channel) err := json.NewDecoder(r.Body).Decode(&channel)
if err != nil { if err != nil {
c.SetInvalidParam("channel") c.SetInvalidParamWithErr("channel", err)
return return
} }
@@ -284,7 +284,7 @@ func localPatchChannel(c *Context, w http.ResponseWriter, r *http.Request) {
var patch *model.ChannelPatch var patch *model.ChannelPatch
err := json.NewDecoder(r.Body).Decode(&patch) err := json.NewDecoder(r.Body).Decode(&patch)
if err != nil { if err != nil {
c.SetInvalidParam("channel") c.SetInvalidParamWithErr("channel", err)
return return
} }

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

@@ -14,6 +14,7 @@ import (
"github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/audit"
"github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/plugin" "github.com/mattermost/mattermost-server/v6/plugin"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
) )
func (api *API) InitCloud() { func (api *API) InitCloud() {
@@ -57,7 +58,7 @@ func handleNotifyAdminToUpgrade(c *Context, w http.ResponseWriter, r *http.Reque
var notifyAdminRequest *model.NotifyAdminToUpgradeRequest var notifyAdminRequest *model.NotifyAdminToUpgradeRequest
err := json.NewDecoder(r.Body).Decode(&notifyAdminRequest) err := json.NewDecoder(r.Body).Decode(&notifyAdminRequest)
if err != nil { if err != nil {
c.SetInvalidParam("notifyAdminRequest") c.SetInvalidParamWithErr("notifyAdminRequest", err)
return return
} }
@@ -232,12 +233,19 @@ func validateBusinessEmail(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
errValidatingEmail := c.App.Cloud().ValidateBusinessEmail(user.Id, emailToValidate.Email) emailErr := c.App.Cloud().ValidateBusinessEmail(user.Id, emailToValidate.Email)
if errValidatingEmail != nil { if emailErr != nil {
c.Err = model.NewAppError("Api4.valiateBusinessEmail", "api.cloud.request_error", nil, errValidatingEmail.Error(), http.StatusInternalServerError) c.Err = model.NewAppError("Api4.validateBusinessEmail", "api.cloud.request_error", nil, emailErr.Error(), http.StatusForbidden)
emailResp := model.ValidateBusinessEmailResponse{IsValid: false}
if err := json.NewEncoder(w).Encode(emailResp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err))
}
return return
} }
ReturnStatusOK(w) emailResp := model.ValidateBusinessEmailResponse{IsValid: true}
if err := json.NewEncoder(w).Encode(emailResp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err))
}
} }
func validateWorkspaceBusinessEmail(c *Context, w http.ResponseWriter, r *http.Request) { func validateWorkspaceBusinessEmail(c *Context, w http.ResponseWriter, r *http.Request) {
@@ -263,20 +271,27 @@ func validateWorkspaceBusinessEmail(c *Context, w http.ResponseWriter, r *http.R
c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, err.Error(), http.StatusInternalServerError) c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, err.Error(), http.StatusInternalServerError)
return return
} }
errValidatingSystemEmail := c.App.Cloud().ValidateBusinessEmail(user.Id, cloudCustomer.Email) emailErr := c.App.Cloud().ValidateBusinessEmail(user.Id, cloudCustomer.Email)
// if the current workspace email is not a valid business email // if the current workspace email is not a valid business email
if errValidatingSystemEmail != nil { if emailErr != nil {
// grab the current admin email and validate it // grab the current admin email and validate it
errValidatingAdminEmail := c.App.Cloud().ValidateBusinessEmail(user.Id, user.Email) errValidatingAdminEmail := c.App.Cloud().ValidateBusinessEmail(user.Id, user.Email)
if errValidatingAdminEmail != nil { if errValidatingAdminEmail != nil {
c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, errValidatingAdminEmail.Error(), http.StatusInternalServerError) c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, errValidatingAdminEmail.Error(), http.StatusForbidden)
emailResp := model.ValidateBusinessEmailResponse{IsValid: false}
if err := json.NewEncoder(w).Encode(emailResp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err))
}
return return
} }
} }
// if any of the emails is valid, return ok // if any of the emails is valid, return ok
ReturnStatusOK(w) emailResp := model.ValidateBusinessEmailResponse{IsValid: true}
if err := json.NewEncoder(w).Encode(emailResp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err))
}
} }
func getCloudProducts(c *Context, w http.ResponseWriter, r *http.Request) { func getCloudProducts(c *Context, w http.ResponseWriter, r *http.Request) {

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

@@ -7,7 +7,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"net/http" "net/http"
"net/http/httptest"
"os" "os"
"testing" "testing"
"time" "time"
@@ -401,21 +400,19 @@ func TestNotifyAdminToUpgrade(t *testing.T) {
}) })
} }
func Test_validateBusinessEmail(t *testing.T) { func Test_validateBusinessEmail(t *testing.T) {
t.Run("Initial request has invalid email", func(t *testing.T) { t.Run("Returns forbidden for non admin executors", func(t *testing.T) {
th := Setup(t).InitBasic() th := Setup(t).InitBasic()
defer th.TearDown() defer th.TearDown()
th.Client.Login(th.BasicUser.Email, th.BasicUser.Password) th.Client.Login(th.BasicUser.Email, th.BasicUser.Password)
validateBusinessEmail := model.ValidateBusinessEmailRequest{Email: ""} invalidEmail := model.ValidateBusinessEmailRequest{Email: "invalid@gmail.com"}
th.App.Srv().SetLicense(model.NewTestLicense("cloud")) th.App.Srv().SetLicense(model.NewTestLicense("cloud"))
cloud := mocks.CloudInterface{} cloud := mocks.CloudInterface{}
resp := httptest.NewRecorder() cloud.Mock.On("ValidateBusinessEmail", th.SystemAdminUser.Id, invalidEmail.Email).Return(errors.New("invalid email"))
cloud.Mock.On("ValidateBusinessEmail", mock.Anything).Return(resp, nil)
cloudImpl := th.App.Srv().Cloud cloudImpl := th.App.Srv().Cloud
defer func() { defer func() {
@@ -423,8 +420,59 @@ func Test_validateBusinessEmail(t *testing.T) {
}() }()
th.App.Srv().Cloud = &cloud th.App.Srv().Cloud = &cloud
_, err := th.Client.ValidateBusinessEmail(&validateBusinessEmail) res, err := th.Client.ValidateBusinessEmail(&invalidEmail)
require.Error(t, err) require.Error(t, err)
require.Equal(t, http.StatusForbidden, res.StatusCode, "403")
})
t.Run("Returns forbidden for invalid business email", func(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
th.Client.Login(th.BasicUser.Email, th.BasicUser.Password)
validBusinessEmail := model.ValidateBusinessEmailRequest{Email: "invalid@slacker.com"}
th.App.Srv().SetLicense(model.NewTestLicense("cloud"))
cloud := mocks.CloudInterface{}
cloud.Mock.On("ValidateBusinessEmail", th.SystemAdminUser.Id, validBusinessEmail.Email).Return(errors.New("invalid email"))
cloudImpl := th.App.Srv().Cloud
defer func() {
th.App.Srv().Cloud = cloudImpl
}()
th.App.Srv().Cloud = &cloud
res, err := th.SystemAdminClient.ValidateBusinessEmail(&validBusinessEmail)
require.Error(t, err)
require.Equal(t, http.StatusForbidden, res.StatusCode, "403")
})
t.Run("Validate business email for admin", func(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
th.Client.Login(th.BasicUser.Email, th.BasicUser.Password)
validBusinessEmail := model.ValidateBusinessEmailRequest{Email: "valid@mattermost.com"}
th.App.Srv().SetLicense(model.NewTestLicense("cloud"))
cloud := mocks.CloudInterface{}
cloud.Mock.On("ValidateBusinessEmail", th.SystemAdminUser.Id, validBusinessEmail.Email).Return(nil)
cloudImpl := th.App.Srv().Cloud
defer func() {
th.App.Srv().Cloud = cloudImpl
}()
th.App.Srv().Cloud = &cloud
res, err := th.SystemAdminClient.ValidateBusinessEmail(&validBusinessEmail)
require.NoError(t, err)
require.Equal(t, http.StatusOK, res.StatusCode, "200")
}) })
} }

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

@@ -32,7 +32,7 @@ func (api *API) InitCommand() {
func createCommand(c *Context, w http.ResponseWriter, r *http.Request) { func createCommand(c *Context, w http.ResponseWriter, r *http.Request) {
var cmd model.Command var cmd model.Command
if jsonErr := json.NewDecoder(r.Body).Decode(&cmd); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&cmd); jsonErr != nil {
c.SetInvalidParam("command") c.SetInvalidParamWithErr("command", jsonErr)
return return
} }
@@ -62,7 +62,7 @@ func createCommand(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rcmd); err != nil { if err := json.NewEncoder(w).Encode(rcmd); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -74,7 +74,7 @@ func updateCommand(c *Context, w http.ResponseWriter, r *http.Request) {
var cmd model.Command var cmd model.Command
if jsonErr := json.NewDecoder(r.Body).Decode(&cmd); jsonErr != nil || cmd.Id != c.Params.CommandId { if jsonErr := json.NewDecoder(r.Body).Decode(&cmd); jsonErr != nil || cmd.Id != c.Params.CommandId {
c.SetInvalidParam("command") c.SetInvalidParamWithErr("command", jsonErr)
return return
} }
@@ -122,7 +122,7 @@ func updateCommand(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(rcmd); err != nil { if err := json.NewEncoder(w).Encode(rcmd); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -134,7 +134,7 @@ func moveCommand(c *Context, w http.ResponseWriter, r *http.Request) {
var cmr model.CommandMoveRequest var cmr model.CommandMoveRequest
if jsonErr := json.NewDecoder(r.Body).Decode(&cmr); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&cmr); jsonErr != nil {
c.SetInvalidParam("team_id") c.SetInvalidParamWithErr("team_id", jsonErr)
return return
} }
@@ -274,7 +274,7 @@ func listCommands(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(commands); err != nil { if err := json.NewEncoder(w).Encode(commands); err != nil {
mlog.Warn("Error writing response", mlog.Err(err)) c.Logger.Warn("Error writing response", mlog.Err(err))
} }
} }
@@ -305,14 +305,14 @@ func getCommand(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if err := json.NewEncoder(w).Encode(cmd); err != nil { if err := json.NewEncoder(w).Encode(cmd); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) { func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
var commandArgs model.CommandArgs var commandArgs model.CommandArgs
if jsonErr := json.NewDecoder(r.Body).Decode(&commandArgs); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&commandArgs); jsonErr != nil {
c.SetInvalidParam("command_args") c.SetInvalidParamWithErr("command_args", jsonErr)
return return
} }
@@ -368,7 +368,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(response); err != nil { if err := json.NewEncoder(w).Encode(response); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -390,7 +390,7 @@ func listAutocompleteCommands(c *Context, w http.ResponseWriter, r *http.Request
} }
if err := json.NewEncoder(w).Encode(commands); err != nil { if err := json.NewEncoder(w).Encode(commands); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -25,7 +25,7 @@ func (api *API) InitCommandLocal() {
func localCreateCommand(c *Context, w http.ResponseWriter, r *http.Request) { func localCreateCommand(c *Context, w http.ResponseWriter, r *http.Request) {
var cmd model.Command var cmd model.Command
if jsonErr := json.NewDecoder(r.Body).Decode(&cmd); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&cmd); jsonErr != nil {
c.SetInvalidParam("command") c.SetInvalidParamWithErr("command", jsonErr)
return return
} }
@@ -47,6 +47,6 @@ func localCreateCommand(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rcmd); err != nil { if err := json.NewEncoder(w).Encode(rcmd); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -646,7 +646,7 @@ func TestExecuteInvalidCommand(t *testing.T) {
rc := &model.CommandResponse{} rc := &model.CommandResponse{}
if err := json.NewEncoder(w).Encode(rc); err != nil { if err := json.NewEncoder(w).Encode(rc); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) th.TestLogger.Warn("Error while writing response", mlog.Err(err))
} }
})) }))
defer ts.Close() defer ts.Close()
@@ -732,7 +732,7 @@ func TestExecuteGetCommand(t *testing.T) {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) th.TestLogger.Warn("Error while writing response", mlog.Err(err))
} }
})) }))
defer ts.Close() defer ts.Close()
@@ -792,7 +792,7 @@ func TestExecutePostCommand(t *testing.T) {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) th.TestLogger.Warn("Error while writing response", mlog.Err(err))
} }
})) }))
defer ts.Close() defer ts.Close()
@@ -846,7 +846,7 @@ func TestExecuteCommandAgainstChannelOnAnotherTeam(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) th.TestLogger.Warn("Error while writing response", mlog.Err(err))
} }
})) }))
defer ts.Close() defer ts.Close()
@@ -898,7 +898,7 @@ func TestExecuteCommandAgainstChannelUserIsNotIn(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) th.TestLogger.Warn("Error while writing response", mlog.Err(err))
} }
})) }))
defer ts.Close() defer ts.Close()
@@ -958,7 +958,7 @@ func TestExecuteCommandInDirectMessageChannel(t *testing.T) {
require.Equal(t, http.MethodPost, r.Method) require.Equal(t, http.MethodPost, r.Method)
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) th.TestLogger.Warn("Error while writing response", mlog.Err(err))
} }
})) }))
defer ts.Close() defer ts.Close()
@@ -1025,7 +1025,7 @@ func TestExecuteCommandInTeamUserIsNotOn(t *testing.T) {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) th.TestLogger.Warn("Error while writing response", mlog.Err(err))
} }
})) }))
defer ts.Close() defer ts.Close()

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

@@ -25,7 +25,7 @@ func (api *API) InitCompliance() {
func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) { func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) {
var job model.Compliance var job model.Compliance
if jsonErr := json.NewDecoder(r.Body).Decode(&job); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&job); jsonErr != nil {
c.SetInvalidParam("compliance") c.SetInvalidParamWithErr("compliance", jsonErr)
return return
} }
@@ -55,7 +55,7 @@ func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request)
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rjob); err != nil { if err := json.NewEncoder(w).Encode(rjob); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -76,7 +76,7 @@ func getComplianceReports(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(crs); err != nil { if err := json.NewEncoder(w).Encode(crs); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -106,7 +106,7 @@ func getComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.AddMeta("compliance_desc", job.Desc) auditRec.AddMeta("compliance_desc", job.Desc)
if err := json.NewEncoder(w).Encode(job); err != nil { if err := json.NewEncoder(w).Encode(job); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -78,7 +78,7 @@ func getConfig(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if err := json.NewEncoder(w).Encode(cfg); err != nil { if err := json.NewEncoder(w).Encode(cfg); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -220,7 +220,7 @@ func updateConfig(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(cfg); err != nil { if err := json.NewEncoder(w).Encode(cfg); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -370,7 +370,7 @@ func patchConfig(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(cfg); err != nil { if err := json.NewEncoder(w).Encode(cfg); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -30,7 +30,7 @@ func localGetConfig(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
if err := json.NewEncoder(w).Encode(cfg); err != nil { if err := json.NewEncoder(w).Encode(cfg); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -82,7 +82,7 @@ func localUpdateConfig(c *Context, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
if err := json.NewEncoder(w).Encode(newCfg); err != nil { if err := json.NewEncoder(w).Encode(newCfg); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -137,7 +137,7 @@ func localPatchConfig(c *Context, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
if err := json.NewEncoder(w).Encode(c.App.GetSanitizedConfig()); err != nil { if err := json.NewEncoder(w).Encode(c.App.GetSanitizedConfig()); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -111,7 +111,7 @@ func getPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
func createPolicy(c *Context, w http.ResponseWriter, r *http.Request) { func createPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
var policy model.RetentionPolicyWithTeamAndChannelIDs var policy model.RetentionPolicyWithTeamAndChannelIDs
if jsonErr := json.NewDecoder(r.Body).Decode(&policy); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&policy); jsonErr != nil {
c.SetInvalidParam("policy") c.SetInvalidParamWithErr("policy", jsonErr)
return return
} }
auditRec := c.MakeAuditRecord("createPolicy", audit.Fail) auditRec := c.MakeAuditRecord("createPolicy", audit.Fail)
@@ -144,7 +144,7 @@ func createPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
func patchPolicy(c *Context, w http.ResponseWriter, r *http.Request) { func patchPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
var patch model.RetentionPolicyWithTeamAndChannelIDs var patch model.RetentionPolicyWithTeamAndChannelIDs
if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil {
c.SetInvalidParam("policy") c.SetInvalidParamWithErr("policy", jsonErr)
return return
} }
c.RequirePolicyId() c.RequirePolicyId()
@@ -233,7 +233,7 @@ func searchTeamsInPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
var props model.TeamSearch var props model.TeamSearch
if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil {
c.SetInvalidParam("team_search") c.SetInvalidParamWithErr("team_search", jsonErr)
return return
} }
@@ -261,7 +261,7 @@ func addTeamsToPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
var teamIDs []string var teamIDs []string
jsonErr := json.NewDecoder(r.Body).Decode(&teamIDs) jsonErr := json.NewDecoder(r.Body).Decode(&teamIDs)
if jsonErr != nil { if jsonErr != nil {
c.SetInvalidParam("team_ids") c.SetInvalidParamWithErr("team_ids", jsonErr)
return return
} }
auditRec := c.MakeAuditRecord("addTeamsToPolicy", audit.Fail) auditRec := c.MakeAuditRecord("addTeamsToPolicy", audit.Fail)
@@ -289,7 +289,7 @@ func removeTeamsFromPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
var teamIDs []string var teamIDs []string
jsonErr := json.NewDecoder(r.Body).Decode(&teamIDs) jsonErr := json.NewDecoder(r.Body).Decode(&teamIDs)
if jsonErr != nil { if jsonErr != nil {
c.SetInvalidParam("team_ids") c.SetInvalidParamWithErr("team_ids", jsonErr)
return return
} }
auditRec := c.MakeAuditRecord("removeTeamsFromPolicy", audit.Fail) auditRec := c.MakeAuditRecord("removeTeamsFromPolicy", audit.Fail)
@@ -342,7 +342,7 @@ func searchChannelsInPolicy(c *Context, w http.ResponseWriter, r *http.Request)
var props *model.ChannelSearch var props *model.ChannelSearch
err := json.NewDecoder(r.Body).Decode(&props) err := json.NewDecoder(r.Body).Decode(&props)
if err != nil { if err != nil {
c.SetInvalidParam("channel_search") c.SetInvalidParamWithErr("channel_search", err)
return return
} }
@@ -382,7 +382,7 @@ func addChannelsToPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
var channelIDs []string var channelIDs []string
jsonErr := json.NewDecoder(r.Body).Decode(&channelIDs) jsonErr := json.NewDecoder(r.Body).Decode(&channelIDs)
if jsonErr != nil { if jsonErr != nil {
c.SetInvalidParam("channel_ids") c.SetInvalidParamWithErr("channel_ids", jsonErr)
return return
} }
auditRec := c.MakeAuditRecord("addChannelsToPolicy", audit.Fail) auditRec := c.MakeAuditRecord("addChannelsToPolicy", audit.Fail)
@@ -411,7 +411,7 @@ func removeChannelsFromPolicy(c *Context, w http.ResponseWriter, r *http.Request
var channelIDs []string var channelIDs []string
jsonErr := json.NewDecoder(r.Body).Decode(&channelIDs) jsonErr := json.NewDecoder(r.Body).Decode(&channelIDs)
if jsonErr != nil { if jsonErr != nil {
c.SetInvalidParam("channel_ids") c.SetInvalidParamWithErr("channel_ids", jsonErr)
return return
} }
auditRec := c.MakeAuditRecord("removeChannelsFromPolicy", audit.Fail) auditRec := c.MakeAuditRecord("removeChannelsFromPolicy", audit.Fail)

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

@@ -98,7 +98,7 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(newEmoji); err != nil { if err := json.NewEncoder(w).Encode(newEmoji); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -121,7 +121,7 @@ func getEmojiList(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(listEmoji); err != nil { if err := json.NewEncoder(w).Encode(listEmoji); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -211,7 +211,7 @@ func getEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(emoji); err != nil { if err := json.NewEncoder(w).Encode(emoji); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -228,7 +228,7 @@ func getEmojiByName(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(emoji); err != nil { if err := json.NewEncoder(w).Encode(emoji); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -257,7 +257,7 @@ func getEmojiImage(c *Context, w http.ResponseWriter, r *http.Request) {
func searchEmojis(c *Context, w http.ResponseWriter, r *http.Request) { func searchEmojis(c *Context, w http.ResponseWriter, r *http.Request) {
var emojiSearch model.EmojiSearch var emojiSearch model.EmojiSearch
if jsonErr := json.NewDecoder(r.Body).Decode(&emojiSearch); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&emojiSearch); jsonErr != nil {
c.SetInvalidParam("term") c.SetInvalidParamWithErr("term", jsonErr)
return return
} }
@@ -273,7 +273,7 @@ func searchEmojis(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(emojis); err != nil { if err := json.NewEncoder(w).Encode(emojis); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -292,6 +292,6 @@ func autocompleteEmojis(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(emojis); err != nil { if err := json.NewEncoder(w).Encode(emojis); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -150,7 +150,7 @@ func uploadFileStream(c *Context, w http.ResponseWriter, r *http.Request) {
// Write the response values to the output upon return // Write the response values to the output upon return
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(fileUploadResponse); err != nil { if err := json.NewEncoder(w).Encode(fileUploadResponse); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -632,7 +632,7 @@ func getFileInfo(c *Context, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "max-age=2592000, private") w.Header().Set("Cache-Control", "max-age=2592000, private")
if err := json.NewEncoder(w).Encode(info); err != nil { if err := json.NewEncoder(w).Encode(info); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -759,7 +759,7 @@ func searchFiles(c *Context, w http.ResponseWriter, r *http.Request, teamID stri
var params model.SearchParameter var params model.SearchParameter
jsonErr := json.NewDecoder(r.Body).Decode(&params) jsonErr := json.NewDecoder(r.Body).Decode(&params)
if jsonErr != nil { if jsonErr != nil {
c.Err = model.NewAppError("searchFiles", "api.post.search_files.invalid_body.app_error", nil, jsonErr.Error(), http.StatusBadRequest) c.Err = model.NewAppError("searchFiles", "api.post.search_files.invalid_body.app_error", nil, "", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
@@ -821,6 +821,6 @@ func searchFiles(c *Context, w http.ResponseWriter, r *http.Request, teamID stri
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
if err := json.NewEncoder(w).Encode(results); err != nil { if err := json.NewEncoder(w).Encode(results); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -84,7 +84,7 @@ func testDoUploadFileRequest(t testing.TB, c *model.Client4, url string, blob []
var res model.FileUploadResponse var res model.FileUploadResponse
if jsonErr := json.NewDecoder(resp.Body).Decode(&res); jsonErr != nil { if jsonErr := json.NewDecoder(resp.Body).Decode(&res); jsonErr != nil {
return nil, nil, model.NewAppError("doUploadFile", "api.unmarshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) return nil, nil, model.NewAppError("doUploadFile", "api.unmarshal_error", nil, "", http.StatusInternalServerError).Wrap(jsonErr)
} }
return &res, model.BuildResponse(resp), nil return &res, model.BuildResponse(resp), nil
} }

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

@@ -78,7 +78,7 @@ func (api *API) graphQL(c *Context, w http.ResponseWriter, r *http.Request) {
defer func() { defer func() {
if response != nil { if response != nil {
if err := json.NewEncoder(w).Encode(response); err != nil { if err := json.NewEncoder(w).Encode(response); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
}() }()

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

@@ -44,7 +44,7 @@ func (c *graphQLClient) login(loginId string, password string) (*model.User, *mo
var user model.User var user model.User
if jsonErr := json.NewDecoder(r.Body).Decode(&user); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&user); jsonErr != nil {
return nil, nil, model.NewAppError("login", "api.unmarshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) return nil, nil, model.NewAppError("login", "api.unmarshal_error", nil, "", http.StatusInternalServerError).Wrap(jsonErr)
} }
return &user, model.BuildResponse(r), nil return &user, model.BuildResponse(r), nil
} }

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

@@ -132,7 +132,7 @@ func getGroup(c *Context, w http.ResponseWriter, r *http.Request) {
func createGroup(c *Context, w http.ResponseWriter, r *http.Request) { func createGroup(c *Context, w http.ResponseWriter, r *http.Request) {
var group *model.GroupWithUserIds var group *model.GroupWithUserIds
if jsonErr := json.NewDecoder(r.Body).Decode(&group); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&group); jsonErr != nil {
c.SetInvalidParam("group") c.SetInvalidParamWithErr("group", jsonErr)
return return
} }
@@ -215,7 +215,7 @@ func patchGroup(c *Context, w http.ResponseWriter, r *http.Request) {
var groupPatch model.GroupPatch var groupPatch model.GroupPatch
if jsonErr := json.NewDecoder(r.Body).Decode(&groupPatch); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&groupPatch); jsonErr != nil {
c.SetInvalidParam("group") c.SetInvalidParamWithErr("group", jsonErr)
return return
} }
@@ -1030,7 +1030,7 @@ func addGroupMembers(c *Context, w http.ResponseWriter, r *http.Request) {
var newMembers *model.GroupModifyMembers var newMembers *model.GroupModifyMembers
if jsonErr := json.NewDecoder(r.Body).Decode(&newMembers); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&newMembers); jsonErr != nil {
c.SetInvalidParam("addGroupMembers") c.SetInvalidParamWithErr("addGroupMembers", jsonErr)
return return
} }
@@ -1083,7 +1083,7 @@ func deleteGroupMembers(c *Context, w http.ResponseWriter, r *http.Request) {
var deleteBody *model.GroupModifyMembers var deleteBody *model.GroupModifyMembers
if jsonErr := json.NewDecoder(r.Body).Decode(&deleteBody); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&deleteBody); jsonErr != nil {
c.SetInvalidParam("deleteGroupMembers") c.SetInvalidParamWithErr("deleteGroupMembers", jsonErr)
return return
} }

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

@@ -8,6 +8,7 @@ import (
"net/http" "net/http"
"github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
) )
func (api *API) InitAction() { func (api *API) InitAction() {
@@ -24,7 +25,10 @@ func doPostAction(c *Context, w http.ResponseWriter, r *http.Request) {
} }
var actionRequest model.DoPostActionRequest var actionRequest model.DoPostActionRequest
json.NewDecoder(r.Body).Decode(&actionRequest) err := json.NewDecoder(r.Body).Decode(&actionRequest)
if err != nil {
c.Logger.Warn("Error decoding the action request", mlog.Err(err))
}
var cookie *model.PostActionCookie var cookie *model.PostActionCookie
if actionRequest.Cookie != "" { if actionRequest.Cookie != "" {
@@ -68,7 +72,7 @@ func openDialog(c *Context, w http.ResponseWriter, r *http.Request) {
var dialog model.OpenDialogRequest var dialog model.OpenDialogRequest
err := json.NewDecoder(r.Body).Decode(&dialog) err := json.NewDecoder(r.Body).Decode(&dialog)
if err != nil { if err != nil {
c.SetInvalidParam("dialog") c.SetInvalidParamWithErr("dialog", err)
return return
} }
@@ -90,7 +94,7 @@ func submitDialog(c *Context, w http.ResponseWriter, r *http.Request) {
jsonErr := json.NewDecoder(r.Body).Decode(&submit) jsonErr := json.NewDecoder(r.Body).Decode(&submit)
if jsonErr != nil { if jsonErr != nil {
c.SetInvalidParam("dialog") c.SetInvalidParamWithErr("dialog", jsonErr)
return return
} }

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

@@ -47,7 +47,7 @@ func getJob(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(job); err != nil { if err := json.NewEncoder(w).Encode(job); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -106,7 +106,7 @@ func downloadJob(c *Context, w http.ResponseWriter, r *http.Request) {
func createJob(c *Context, w http.ResponseWriter, r *http.Request) { func createJob(c *Context, w http.ResponseWriter, r *http.Request) {
var job model.Job var job model.Job
if jsonErr := json.NewDecoder(r.Body).Decode(&job); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&job); jsonErr != nil {
c.SetInvalidParam("job") c.SetInvalidParamWithErr("job", jsonErr)
return return
} }
@@ -137,7 +137,7 @@ func createJob(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rjob); err != nil { if err := json.NewEncoder(w).Encode(rjob); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -10,6 +10,7 @@ import (
"github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/audit"
"github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
) )
type mixedUnlinkedGroup struct { type mixedUnlinkedGroup struct {
@@ -51,7 +52,10 @@ func syncLdap(c *Context, w http.ResponseWriter, r *http.Request) {
IncludeRemovedMembers bool `json:"include_removed_members"` IncludeRemovedMembers bool `json:"include_removed_members"`
} }
var opts LdapSyncOptions var opts LdapSyncOptions
json.NewDecoder(r.Body).Decode(&opts) err := json.NewDecoder(r.Body).Decode(&opts)
if err != nil {
c.Logger.Warn("Error decoding LDAP sync options", mlog.Err(err))
}
auditRec := c.MakeAuditRecord("syncLdap", audit.Fail) auditRec := c.MakeAuditRecord("syncLdap", audit.Fail)
defer c.LogAuditRec(auditRec) defer c.LogAuditRec(auditRec)

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

@@ -136,7 +136,7 @@ func addLicense(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(license); err != nil { if err := json.NewEncoder(w).Encode(license); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -73,7 +73,7 @@ func localAddLicense(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(license); err != nil { if err := json.NewEncoder(w).Encode(license); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -27,7 +27,7 @@ func (api *API) InitOAuth() {
func createOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) { func createOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
var oauthApp model.OAuthApp var oauthApp model.OAuthApp
if jsonErr := json.NewDecoder(r.Body).Decode(&oauthApp); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&oauthApp); jsonErr != nil {
c.SetInvalidParam("oauth_app") c.SetInvalidParamWithErr("oauth_app", jsonErr)
return return
} }
@@ -60,7 +60,7 @@ func createOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rapp); err != nil { if err := json.NewEncoder(w).Encode(rapp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -82,7 +82,7 @@ func updateOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
var oauthApp model.OAuthApp var oauthApp model.OAuthApp
if jsonErr := json.NewDecoder(r.Body).Decode(&oauthApp); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&oauthApp); jsonErr != nil {
c.SetInvalidParam("oauth_app") c.SetInvalidParamWithErr("oauth_app", jsonErr)
return return
} }
auditRec.AddEventParameter("oauth_app", oauthApp) auditRec.AddEventParameter("oauth_app", oauthApp)
@@ -121,7 +121,7 @@ func updateOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(updatedOAuthApp); err != nil { if err := json.NewEncoder(w).Encode(updatedOAuthApp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -178,7 +178,7 @@ func getOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(oauthApp); err != nil { if err := json.NewEncoder(w).Encode(oauthApp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -196,7 +196,7 @@ func getOAuthAppInfo(c *Context, w http.ResponseWriter, r *http.Request) {
oauthApp.Sanitize() oauthApp.Sanitize()
if err := json.NewEncoder(w).Encode(oauthApp); err != nil { if err := json.NewEncoder(w).Encode(oauthApp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -280,7 +280,7 @@ func regenerateOAuthAppSecret(c *Context, w http.ResponseWriter, r *http.Request
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(oauthApp); err != nil { if err := json.NewEncoder(w).Encode(oauthApp); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -167,7 +167,7 @@ func installMarketplacePlugin(c *Context, w http.ResponseWriter, r *http.Request
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(manifest); err != nil { if err := json.NewEncoder(w).Encode(manifest); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -189,7 +189,7 @@ func getPlugins(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(response); err != nil { if err := json.NewEncoder(w).Encode(response); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -211,7 +211,7 @@ func getPluginStatuses(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(response); err != nil { if err := json.NewEncoder(w).Encode(response); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -402,7 +402,7 @@ func installPlugin(c *Context, w http.ResponseWriter, plugin io.ReadSeeker, forc
} }
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(manifest); err != nil { if err := json.NewEncoder(w).Encode(manifest); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -462,6 +462,6 @@ func getFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *h
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(firstAdminVisitMarketplaceObj); err != nil { if err := json.NewEncoder(w).Encode(firstAdminVisitMarketplaceObj); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -43,7 +43,7 @@ func (api *API) InitPost() {
func createPost(c *Context, w http.ResponseWriter, r *http.Request) { func createPost(c *Context, w http.ResponseWriter, r *http.Request) {
var post model.Post var post model.Post
if jsonErr := json.NewDecoder(r.Body).Decode(&post); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&post); jsonErr != nil {
c.SetInvalidParam("post") c.SetInvalidParamWithErr("post", jsonErr)
return return
} }
@@ -106,14 +106,19 @@ func createPost(c *Context, w http.ResponseWriter, r *http.Request) {
// Note that rp has already had PreparePostForClient called on it by App.CreatePost // Note that rp has already had PreparePostForClient called on it by App.CreatePost
if err := rp.EncodeJSON(w); err != nil { if err := rp.EncodeJSON(w); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
func createEphemeralPost(c *Context, w http.ResponseWriter, r *http.Request) { func createEphemeralPost(c *Context, w http.ResponseWriter, r *http.Request) {
ephRequest := model.PostEphemeral{} ephRequest := model.PostEphemeral{}
json.NewDecoder(r.Body).Decode(&ephRequest) jsonErr := json.NewDecoder(r.Body).Decode(&ephRequest)
if jsonErr != nil {
c.SetInvalidParamWithErr("body", jsonErr)
return
}
if ephRequest.UserID == "" { if ephRequest.UserID == "" {
c.SetInvalidParam("user_id") c.SetInvalidParam("user_id")
return return
@@ -476,7 +481,7 @@ func getPostsByIds(c *Context, w http.ResponseWriter, r *http.Request) {
w.Header().Set(model.HeaderFirstInaccessiblePostTime, strconv.FormatInt(firstInaccessiblePostTime, 10)) w.Header().Set(model.HeaderFirstInaccessiblePostTime, strconv.FormatInt(firstInaccessiblePostTime, 10))
if err := json.NewEncoder(w).Encode(posts); err != nil { if err := json.NewEncoder(w).Encode(posts); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -525,6 +530,35 @@ func getPostThread(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
rPost, err := c.App.GetSinglePost(c.Params.PostId, false)
if err != nil {
c.Err = err
return
}
hasPermission := false
becauseCompliance := false
if c.App.SessionHasPermissionToChannel(c.AppContext, *c.AppContext.Session(), rPost.ChannelId, model.PermissionReadChannel) {
hasPermission = true
} else if channel, cErr := c.App.GetChannel(c.AppContext, rPost.ChannelId); cErr == nil {
if channel.Type == model.ChannelTypeOpen &&
c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionReadPublicChannel) {
hasPermission = true
if *c.App.Config().MessageExportSettings.EnableExport {
hasPermission = false
becauseCompliance = true
}
}
}
if !hasPermission {
if becauseCompliance {
c.Err = model.NewAppError("getPostThread", "api.post.compliance_enabled.join_channel_to_view_post", nil, "", http.StatusForbidden)
} else {
c.SetPermissionError(model.PermissionReadChannel)
}
return
}
// For now, by default we return all items unless it's set to maintain // For now, by default we return all items unless it's set to maintain
// backwards compatibility with mobile. But when the next ESR passes, we need to // backwards compatibility with mobile. But when the next ESR passes, we need to
// change this to web.PerPageDefault. // change this to web.PerPageDefault.
@@ -627,7 +661,7 @@ func searchPostsInAllTeams(c *Context, w http.ResponseWriter, r *http.Request) {
func searchPosts(c *Context, w http.ResponseWriter, r *http.Request, teamId string) { func searchPosts(c *Context, w http.ResponseWriter, r *http.Request, teamId string) {
var params model.SearchParameter var params model.SearchParameter
if jsonErr := json.NewDecoder(r.Body).Decode(&params); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&params); jsonErr != nil {
c.Err = model.NewAppError("searchPosts", "api.post.search_posts.invalid_body.app_error", nil, jsonErr.Error(), http.StatusBadRequest) c.Err = model.NewAppError("searchPosts", "api.post.search_posts.invalid_body.app_error", nil, "", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
@@ -710,7 +744,7 @@ func updatePost(c *Context, w http.ResponseWriter, r *http.Request) {
var post model.Post var post model.Post
if jsonErr := json.NewDecoder(r.Body).Decode(&post); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&post); jsonErr != nil {
c.SetInvalidParam("post") c.SetInvalidParamWithErr("post", jsonErr)
return return
} }
@@ -771,7 +805,7 @@ func patchPost(c *Context, w http.ResponseWriter, r *http.Request) {
var post model.PostPatch var post model.PostPatch
if jsonErr := json.NewDecoder(r.Body).Decode(&post); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&post); jsonErr != nil {
c.SetInvalidParam("post") c.SetInvalidParamWithErr("post", jsonErr)
return return
} }
@@ -840,7 +874,7 @@ func setPostUnread(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if err := json.NewEncoder(w).Encode(state); err != nil { if err := json.NewEncoder(w).Encode(state); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -861,7 +895,7 @@ func setPostReminder(c *Context, w http.ResponseWriter, r *http.Request) {
var reminder model.PostReminder var reminder model.PostReminder
if jsonErr := json.NewDecoder(r.Body).Decode(&reminder); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&reminder); jsonErr != nil {
c.SetInvalidParam("target_time") c.SetInvalidParamWithErr("target_time", jsonErr)
return return
} }

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

@@ -25,6 +25,7 @@ import (
"github.com/mattermost/mattermost-server/v6/app" "github.com/mattermost/mattermost-server/v6/app"
"github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/plugin/plugintest/mock" "github.com/mattermost/mattermost-server/v6/plugin/plugintest/mock"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
"github.com/mattermost/mattermost-server/v6/store/storetest/mocks" "github.com/mattermost/mattermost-server/v6/store/storetest/mocks"
"github.com/mattermost/mattermost-server/v6/utils" "github.com/mattermost/mattermost-server/v6/utils"
"github.com/mattermost/mattermost-server/v6/utils/testutils" "github.com/mattermost/mattermost-server/v6/utils/testutils"
@@ -306,7 +307,10 @@ func testCreatePostWithOutgoingHook(
if requestContentType == "application/json" { if requestContentType == "application/json" {
decoder := json.NewDecoder(r.Body) decoder := json.NewDecoder(r.Body)
o := &model.OutgoingWebhookPayload{} o := &model.OutgoingWebhookPayload{}
decoder.Decode(&o) err := decoder.Decode(&o)
if err != nil {
th.TestLogger.Warn("Error decoding body", mlog.Err(err))
}
if !reflect.DeepEqual(expectedPayload, o) { if !reflect.DeepEqual(expectedPayload, o) {
t.Logf("JSON payload is %+v, should be %+v", o, expectedPayload) t.Logf("JSON payload is %+v, should be %+v", o, expectedPayload)
@@ -448,7 +452,7 @@ func TestCreatePostPublic(t *testing.T) {
require.Error(t, err) require.Error(t, err)
CheckForbiddenStatus(t, resp) CheckForbiddenStatus(t, resp)
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId+" "+model.SystemPostAllPublicRoleId, false) th.App.UpdateUserRoles(th.Context, ruser.Id, model.SystemUserRoleId+" "+model.SystemPostAllPublicRoleId, false)
th.App.Srv().InvalidateAllCaches() th.App.Srv().InvalidateAllCaches()
client.Login(user.Email, user.Password) client.Login(user.Email, user.Password)
@@ -461,7 +465,7 @@ func TestCreatePostPublic(t *testing.T) {
require.Error(t, err) require.Error(t, err)
CheckForbiddenStatus(t, resp) CheckForbiddenStatus(t, resp)
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId, false) th.App.UpdateUserRoles(th.Context, ruser.Id, model.SystemUserRoleId, false)
th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "") th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "")
th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TeamUserRoleId+" "+model.TeamPostAllPublicRoleId) th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TeamUserRoleId+" "+model.TeamPostAllPublicRoleId)
th.App.Srv().InvalidateAllCaches() th.App.Srv().InvalidateAllCaches()
@@ -498,7 +502,7 @@ func TestCreatePostAll(t *testing.T) {
require.Error(t, err) require.Error(t, err)
CheckForbiddenStatus(t, resp) CheckForbiddenStatus(t, resp)
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId+" "+model.SystemPostAllRoleId, false) th.App.UpdateUserRoles(th.Context, ruser.Id, model.SystemUserRoleId+" "+model.SystemPostAllRoleId, false)
th.App.Srv().InvalidateAllCaches() th.App.Srv().InvalidateAllCaches()
client.Login(user.Email, user.Password) client.Login(user.Email, user.Password)
@@ -514,7 +518,7 @@ func TestCreatePostAll(t *testing.T) {
_, _, err = client.CreatePost(post) _, _, err = client.CreatePost(post)
require.NoError(t, err) require.NoError(t, err)
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId, false) th.App.UpdateUserRoles(th.Context, ruser.Id, model.SystemUserRoleId, false)
th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "") th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "")
th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TeamUserRoleId+" "+model.TeamPostAllRoleId) th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TeamUserRoleId+" "+model.TeamPostAllRoleId)
th.App.Srv().InvalidateAllCaches() th.App.Srv().InvalidateAllCaches()
@@ -924,7 +928,7 @@ func TestPatchPost(t *testing.T) {
t.Run("invalid requests", func(t *testing.T) { t.Run("invalid requests", func(t *testing.T) {
r, err := client.DoAPIPut("/posts/"+post.Id+"/patch", "garbage") r, err := client.DoAPIPut("/posts/"+post.Id+"/patch", "garbage")
require.EqualError(t, err, ": Invalid or missing post in request body., ") require.EqualError(t, err, ": Invalid or missing post in request body.")
require.Equal(t, http.StatusBadRequest, r.StatusCode, "wrong status code") require.Equal(t, http.StatusBadRequest, r.StatusCode, "wrong status code")
patch := &model.PostPatch{} patch := &model.PostPatch{}
@@ -2191,10 +2195,26 @@ func TestGetPostThread(t *testing.T) {
client.RemoveUserFromChannel(th.BasicChannel.Id, th.BasicUser.Id) client.RemoveUserFromChannel(th.BasicChannel.Id, th.BasicUser.Id)
// Channel is public, should be able to read post messageExportEnabled := *th.App.Config().MessageExportSettings.EnableExport
// Channel is public, and compliance export is OFF, should be able to read post
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.MessageExportSettings.EnableExport = false
})
_, _, err = client.GetPostThread(th.BasicPost.Id, "", false) _, _, err = client.GetPostThread(th.BasicPost.Id, "", false)
require.NoError(t, err) require.NoError(t, err)
// channel is public, and compliance export is ON, should NOT be able to read post
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.MessageExportSettings.EnableExport = true
})
_, resp, err = client.GetPostThread(th.BasicPost.Id, "", false)
require.Error(t, err)
CheckForbiddenStatus(t, resp)
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.MessageExportSettings.EnableExport = messageExportEnabled
})
privatePost := th.CreatePostWithClient(client, th.BasicPrivateChannel) privatePost := th.CreatePostWithClient(client, th.BasicPrivateChannel)
_, _, err = client.GetPostThread(privatePost.Id, "", false) _, _, err = client.GetPostThread(privatePost.Id, "", false)

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

@@ -38,7 +38,7 @@ func getPreferences(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(preferences); err != nil { if err := json.NewEncoder(w).Encode(preferences); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -60,7 +60,7 @@ func getPreferencesByCategory(c *Context, w http.ResponseWriter, r *http.Request
} }
if err := json.NewEncoder(w).Encode(preferences); err != nil { if err := json.NewEncoder(w).Encode(preferences); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -82,7 +82,7 @@ func getPreferenceByCategoryAndName(c *Context, w http.ResponseWriter, r *http.R
} }
if err := json.NewEncoder(w).Encode(preferences); err != nil { if err := json.NewEncoder(w).Encode(preferences); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -102,7 +102,7 @@ func updatePreferences(c *Context, w http.ResponseWriter, r *http.Request) {
var preferences model.Preferences var preferences model.Preferences
if jsonErr := json.NewDecoder(r.Body).Decode(&preferences); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&preferences); jsonErr != nil {
c.SetInvalidParam("preferences") c.SetInvalidParamWithErr("preferences", jsonErr)
return return
} }
@@ -150,7 +150,7 @@ func deletePreferences(c *Context, w http.ResponseWriter, r *http.Request) {
var preferences model.Preferences var preferences model.Preferences
if jsonErr := json.NewDecoder(r.Body).Decode(&preferences); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&preferences); jsonErr != nil {
c.SetInvalidParam("preferences") c.SetInvalidParamWithErr("preferences", jsonErr)
return return
} }

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

@@ -21,7 +21,7 @@ func (api *API) InitReaction() {
func saveReaction(c *Context, w http.ResponseWriter, r *http.Request) { func saveReaction(c *Context, w http.ResponseWriter, r *http.Request) {
var reaction model.Reaction var reaction model.Reaction
if jsonErr := json.NewDecoder(r.Body).Decode(&reaction); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&reaction); jsonErr != nil {
c.SetInvalidParam("reaction") c.SetInvalidParamWithErr("reaction", jsonErr)
return return
} }
@@ -47,7 +47,7 @@ func saveReaction(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(re); err != nil { if err := json.NewEncoder(w).Encode(re); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -32,7 +32,7 @@ func remoteClusterPing(c *Context, w http.ResponseWriter, r *http.Request) {
var frame model.RemoteClusterFrame var frame model.RemoteClusterFrame
if jsonErr := json.NewDecoder(r.Body).Decode(&frame); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&frame); jsonErr != nil {
c.Err = model.NewAppError("remoteClusterPing", "api.unmarshal_error", nil, jsonErr.Error(), http.StatusBadRequest) c.Err = model.NewAppError("remoteClusterPing", "api.unmarshal_error", nil, "", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
@@ -78,7 +78,7 @@ func remoteClusterAcceptMessage(c *Context, w http.ResponseWriter, r *http.Reque
var frame model.RemoteClusterFrame var frame model.RemoteClusterFrame
if jsonErr := json.NewDecoder(r.Body).Decode(&frame); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&frame); jsonErr != nil {
c.Err = model.NewAppError("remoteClusterAcceptMessage", "api.unmarshal_error", nil, jsonErr.Error(), http.StatusBadRequest) c.Err = model.NewAppError("remoteClusterAcceptMessage", "api.unmarshal_error", nil, "", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
@@ -124,7 +124,7 @@ func remoteClusterConfirmInvite(c *Context, w http.ResponseWriter, r *http.Reque
var frame model.RemoteClusterFrame var frame model.RemoteClusterFrame
if jsonErr := json.NewDecoder(r.Body).Decode(&frame); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&frame); jsonErr != nil {
c.Err = model.NewAppError("remoteClusterConfirmInvite", "api.unmarshal_error", nil, jsonErr.Error(), http.StatusBadRequest) c.Err = model.NewAppError("remoteClusterConfirmInvite", "api.unmarshal_error", nil, "", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
@@ -216,7 +216,7 @@ func uploadRemoteData(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(info); err != nil { if err := json.NewEncoder(w).Encode(info); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -269,7 +269,7 @@ func remoteSetProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.AddMeta("user", user) auditRec.AddMeta("user", user)
imageData := imageArray[0] imageData := imageArray[0]
if err := c.App.SetProfileImage(c.Params.UserId, imageData); err != nil { if err := c.App.SetProfileImage(c.AppContext, c.Params.UserId, imageData); err != nil {
c.Err = err c.Err = err
return return
} }

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

@@ -71,7 +71,7 @@ func getGraphQLTeams(c *web.Context, teamIDs []string) ([]*model.Team, error) {
} }
} }
if !c.App.SessionHasPermissionToTeams(c.AppContext, *c.AppContext.Session(), teamsToCheck, model.PermissionViewMembers) { if !c.App.SessionHasPermissionToTeams(c.AppContext, *c.AppContext.Session(), teamsToCheck, model.PermissionViewTeam) {
c.SetPermissionError(model.PermissionViewTeam) c.SetPermissionError(model.PermissionViewTeam)
return nil, c.Err return nil, c.Err
} }

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

@@ -289,3 +289,123 @@ func TestGraphQLTeamMembers(t *testing.T) {
assert.Len(t, q.TeamMembers, 1) assert.Len(t, q.TeamMembers, 1)
}) })
} }
func TestGraphQLTeamMembersAsGuest(t *testing.T) {
os.Setenv("MM_FEATUREFLAGS_GRAPHQL", "true")
defer os.Unsetenv("MM_FEATUREFLAGS_GRAPHQL")
th := Setup(t)
id := model.NewId()
team := &model.Team{
DisplayName: "dn_" + id,
Name: GenerateTestTeamName(),
Email: th.GenerateTestEmail(),
Type: model.TeamOpen,
AllowOpenInvite: true,
}
var err error
team, _, err = th.Client.CreateTeam(team)
require.NoError(t, err)
th.BasicTeam = team
th.BasicChannel = th.CreatePublicChannel()
th.LinkUserToTeam(th.BasicUser, th.BasicTeam)
th.App.AddUserToChannel(th.Context, th.BasicUser, th.BasicChannel, false)
th.LoginBasic()
defer th.TearDown()
require.Nil(t, th.App.DemoteUserToGuest(th.Context, th.BasicUser))
var q struct {
TeamMembers []struct {
User struct {
ID string `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
NickName string `json:"nickname"`
} `json:"user"`
Team struct {
ID string `json:"id"`
DisplayName string `json:"displayName"`
Name string `json:"name"`
CreateAt float64 `json:"createAt"`
DeleteAt float64 `json:"deleteAt"`
SchemeId *string `json:"schemeId"`
PolicyId *string `json:"policyId"`
CloudLimitsArchived bool `json:"cloudLimitsArchived"`
} `json:"team"`
Roles []struct {
ID string `json:"id"`
Name string `json:"Name"`
Permissions []string `json:"permissions"`
SchemeManaged bool `json:"schemeManaged"`
BuiltIn bool `json:"builtIn"`
} `json:"roles"`
DeleteAt float64 `json:"deleteAt"`
SchemeGuest bool `json:"schemeGuest"`
SchemeUser bool `json:"schemeUser"`
SchemeAdmin bool `json:"schemeAdmin"`
} `json:"teamMembers"`
}
t.Run("User", func(t *testing.T) {
input := graphQLInput{
OperationName: "teamMembers",
Query: `
query teamMembers($userId: String = "", $teamId: String = "") {
teamMembers(userId: $userId, teamId: $teamId) {
team {
id
displayName
}
user {
id
username
email
firstName
lastName
}
roles {
id
name
}
schemeGuest
schemeUser
schemeAdmin
}
}
`,
Variables: map[string]any{
"userId": "me",
},
}
resp, err := th.MakeGraphQLRequest(&input)
require.NoError(t, err)
require.Len(t, resp.Errors, 0)
require.NoError(t, json.Unmarshal(resp.Data, &q))
assert.Len(t, q.TeamMembers, 1)
tm := q.TeamMembers[0]
assert.Equal(t, th.BasicTeam.Id, tm.Team.ID)
assert.Equal(t, th.BasicTeam.DisplayName, tm.Team.DisplayName)
assert.Equal(t, th.BasicUser.Id, tm.User.ID)
assert.Equal(t, th.BasicUser.Username, tm.User.Username)
assert.Equal(t, th.BasicUser.Email, tm.User.Email)
assert.Equal(t, th.BasicUser.FirstName, tm.User.FirstName)
assert.Equal(t, th.BasicUser.LastName, tm.User.LastName)
require.Len(t, tm.Roles, 1)
assert.NotEmpty(t, tm.Roles[0].ID)
assert.Equal(t, "team_guest", tm.Roles[0].Name)
assert.True(t, tm.SchemeGuest)
assert.False(t, tm.SchemeUser)
assert.False(t, tm.SchemeAdmin)
})
}

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

@@ -172,7 +172,7 @@ func TestGraphQLUser(t *testing.T) {
t.Run("Update", func(t *testing.T) { t.Run("Update", func(t *testing.T) {
th.BasicUser.Props = map[string]string{"testpropkey": "testpropvalue"} th.BasicUser.Props = map[string]string{"testpropkey": "testpropvalue"}
th.App.UpdateUser(th.BasicUser, false) th.App.UpdateUser(th.Context, th.BasicUser, false)
input := graphQLInput{ input := graphQLInput{
OperationName: "user", OperationName: "user",

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

@@ -60,7 +60,7 @@ func getRole(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(role); err != nil { if err := json.NewEncoder(w).Encode(role); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -77,7 +77,7 @@ func getRoleByName(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(role); err != nil { if err := json.NewEncoder(w).Encode(role); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -117,7 +117,7 @@ func patchRole(c *Context, w http.ResponseWriter, r *http.Request) {
var patch model.RolePatch var patch model.RolePatch
if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil {
c.SetInvalidParam("role") c.SetInvalidParamWithErr("role", jsonErr)
return return
} }
@@ -214,6 +214,6 @@ func patchRole(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("") c.LogAudit("")
if err := json.NewEncoder(w).Encode(role); err != nil { if err := json.NewEncoder(w).Encode(role); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -232,7 +232,7 @@ func getSamlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request
status := c.App.GetSamlCertificateStatus() status := c.App.GetSamlCertificateStatus()
if err := json.NewEncoder(w).Encode(status); err != nil { if err := json.NewEncoder(w).Encode(status); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -256,7 +256,7 @@ func getSamlMetadataFromIdp(c *Context, w http.ResponseWriter, r *http.Request)
} }
if err := json.NewEncoder(w).Encode(metadata); err != nil { if err := json.NewEncoder(w).Encode(metadata); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -273,7 +273,7 @@ func resetAuthDataToEmail(c *Context, w http.ResponseWriter, r *http.Request) {
var params *ResetAuthDataParams var params *ResetAuthDataParams
jsonErr := json.NewDecoder(r.Body).Decode(&params) jsonErr := json.NewDecoder(r.Body).Decode(&params)
if jsonErr != nil { if jsonErr != nil {
c.Err = model.NewAppError("resetAuthDataToEmail", "model.utils.decode_json.app_error", nil, jsonErr.Error(), http.StatusBadRequest) c.Err = model.NewAppError("resetAuthDataToEmail", "model.utils.decode_json.app_error", nil, "", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
numAffected, appErr := c.App.ResetSamlAuthDataToEmail(params.IncludeDeleted, params.DryRun, params.SpecifiedUserIDs) numAffected, appErr := c.App.ResetSamlAuthDataToEmail(params.IncludeDeleted, params.DryRun, params.SpecifiedUserIDs)
@@ -281,6 +281,14 @@ func resetAuthDataToEmail(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err = appErr c.Err = appErr
return return
} }
b, _ := json.Marshal(map[string]any{"num_affected": numAffected})
w.Write(b) n := struct {
NumAffected int `json:"num_affected"`
}{
NumAffected: numAffected,
}
if err := json.NewEncoder(w).Encode(n); err != nil {
c.Logger.Warn("Error writing response", mlog.Err(err))
}
} }

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

@@ -25,7 +25,7 @@ func (api *API) InitScheme() {
func createScheme(c *Context, w http.ResponseWriter, r *http.Request) { func createScheme(c *Context, w http.ResponseWriter, r *http.Request) {
var scheme model.Scheme var scheme model.Scheme
if jsonErr := json.NewDecoder(r.Body).Decode(&scheme); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&scheme); jsonErr != nil {
c.SetInvalidParam("scheme") c.SetInvalidParamWithErr("scheme", jsonErr)
return return
} }
@@ -55,7 +55,7 @@ func createScheme(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(returnedScheme); err != nil { if err := json.NewEncoder(w).Encode(returnedScheme); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -77,7 +77,7 @@ func getScheme(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(scheme); err != nil { if err := json.NewEncoder(w).Encode(scheme); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -172,7 +172,7 @@ func getChannelsForScheme(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(channels); err != nil { if err := json.NewEncoder(w).Encode(channels); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -184,7 +184,7 @@ func patchScheme(c *Context, w http.ResponseWriter, r *http.Request) {
var patch model.SchemePatch var patch model.SchemePatch
if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil {
c.SetInvalidParam("scheme") c.SetInvalidParamWithErr("scheme", jsonErr)
return return
} }
@@ -223,7 +223,7 @@ func patchScheme(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("") c.LogAudit("")
if err := json.NewEncoder(w).Encode(scheme); err != nil { if err := json.NewEncoder(w).Encode(scheme); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -163,7 +163,7 @@ func TestCreateDirectChannelWithRemoteUser(t *testing.T) {
localUser := th.BasicUser localUser := th.BasicUser
remoteUser := th.CreateUser() remoteUser := th.CreateUser()
remoteUser.RemoteId = model.NewString(model.NewId()) remoteUser.RemoteId = model.NewString(model.NewId())
remoteUser, appErr := th.App.UpdateUser(remoteUser, false) remoteUser, appErr := th.App.UpdateUser(th.Context, remoteUser, false)
require.Nil(t, appErr) require.Nil(t, appErr)
dm, _, err := client.CreateDirectChannel(localUser.Id, remoteUser.Id) dm, _, err := client.CreateDirectChannel(localUser.Id, remoteUser.Id)
@@ -194,7 +194,7 @@ func TestCreateDirectChannelWithRemoteUser(t *testing.T) {
require.Nil(t, appErr) require.Nil(t, appErr)
remoteUser.RemoteId = model.NewString(rc.RemoteId) remoteUser.RemoteId = model.NewString(rc.RemoteId)
remoteUser, appErr = th.App.UpdateUser(remoteUser, false) remoteUser, appErr = th.App.UpdateUser(th.Context, remoteUser, false)
require.Nil(t, appErr) require.Nil(t, appErr)
dm, _, err := client.CreateDirectChannel(localUser.Id, remoteUser.Id) dm, _, err := client.CreateDirectChannel(localUser.Id, remoteUser.Id)
@@ -227,7 +227,7 @@ func TestCreateDirectChannelWithRemoteUser(t *testing.T) {
require.Nil(t, appErr) require.Nil(t, appErr)
remoteUser.RemoteId = model.NewString(rc.RemoteId) remoteUser.RemoteId = model.NewString(rc.RemoteId)
remoteUser, appErr = th.App.UpdateUser(remoteUser, false) remoteUser, appErr = th.App.UpdateUser(th.Context, remoteUser, false)
require.Nil(t, appErr) require.Nil(t, appErr)
dm, _, err := client.CreateDirectChannel(remoteUser.Id, localUser.Id) dm, _, err := client.CreateDirectChannel(remoteUser.Id, localUser.Id)

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

@@ -44,7 +44,7 @@ func getUserStatus(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(statusMap[0]); err != nil { if err := json.NewEncoder(w).Encode(statusMap[0]); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -86,7 +86,7 @@ func updateUserStatus(c *Context, w http.ResponseWriter, r *http.Request) {
var status model.Status var status model.Status
if jsonErr := json.NewDecoder(r.Body).Decode(&status); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&status); jsonErr != nil {
c.SetInvalidParam("status") c.SetInvalidParamWithErr("status", jsonErr)
return return
} }
@@ -103,7 +103,7 @@ func updateUserStatus(c *Context, w http.ResponseWriter, r *http.Request) {
currentStatus, err := c.App.GetStatus(c.Params.UserId) currentStatus, err := c.App.GetStatus(c.Params.UserId)
if err == nil && currentStatus.Status == model.StatusOutOfOffice && status.Status != model.StatusOutOfOffice { if err == nil && currentStatus.Status == model.StatusOutOfOffice && status.Status != model.StatusOutOfOffice {
c.App.DisableAutoResponder(c.Params.UserId, c.IsSystemAdmin()) c.App.DisableAutoResponder(c.AppContext, c.Params.UserId, c.IsSystemAdmin())
} }
switch status.Status { switch status.Status {
@@ -137,7 +137,7 @@ func updateUserCustomStatus(c *Context, w http.ResponseWriter, r *http.Request)
var customStatus model.CustomStatus var customStatus model.CustomStatus
jsonErr := json.NewDecoder(r.Body).Decode(&customStatus) jsonErr := json.NewDecoder(r.Body).Decode(&customStatus)
if jsonErr != nil || (customStatus.Emoji == "" && customStatus.Text == "") || !customStatus.AreDurationAndExpirationTimeValid() { if jsonErr != nil || (customStatus.Emoji == "" && customStatus.Text == "") || !customStatus.AreDurationAndExpirationTimeValid() {
c.SetInvalidParam("custom_status") c.SetInvalidParamWithErr("custom_status", jsonErr)
return return
} }
@@ -147,7 +147,7 @@ func updateUserCustomStatus(c *Context, w http.ResponseWriter, r *http.Request)
} }
customStatus.PreSave() customStatus.PreSave()
err := c.App.SetCustomStatus(c.Params.UserId, &customStatus) err := c.App.SetCustomStatus(c.AppContext, c.Params.UserId, &customStatus)
if err != nil { if err != nil {
c.Err = err c.Err = err
return return
@@ -172,7 +172,7 @@ func removeUserCustomStatus(c *Context, w http.ResponseWriter, r *http.Request)
return return
} }
if err := c.App.RemoveCustomStatus(c.Params.UserId); err != nil { if err := c.App.RemoveCustomStatus(c.AppContext, c.Params.UserId); err != nil {
c.Err = err c.Err = err
return return
} }
@@ -193,7 +193,7 @@ func removeUserRecentCustomStatus(c *Context, w http.ResponseWriter, r *http.Req
var recentCustomStatus model.CustomStatus var recentCustomStatus model.CustomStatus
if jsonErr := json.NewDecoder(r.Body).Decode(&recentCustomStatus); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&recentCustomStatus); jsonErr != nil {
c.SetInvalidParam("recent_custom_status") c.SetInvalidParamWithErr("recent_custom_status", jsonErr)
return return
} }

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

@@ -271,7 +271,7 @@ func getAudits(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.AddEventParameter("audits_per_page", c.Params.LogsPerPage) auditRec.AddEventParameter("audits_per_page", c.Params.LogsPerPage)
if err := json.NewEncoder(w).Encode(audits); err != nil { if err := json.NewEncoder(w).Encode(audits); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -410,7 +410,7 @@ func getAnalytics(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(rows); err != nil { if err := json.NewEncoder(w).Encode(rows); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -543,9 +543,9 @@ func pushNotificationAck(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err = model.NewAppError("pushNotificationAck", c.Err = model.NewAppError("pushNotificationAck",
"api.push_notifications_ack.message.parse.app_error", "api.push_notifications_ack.message.parse.app_error",
nil, nil,
jsonErr.Error(), "",
http.StatusBadRequest, http.StatusBadRequest,
) ).Wrap(jsonErr)
return return
} }
@@ -586,7 +586,7 @@ func pushNotificationAck(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if err2 := json.NewEncoder(w).Encode(msg); err2 != nil { if err2 := json.NewEncoder(w).Encode(msg); err2 != nil {
mlog.Warn("Error while writing response", mlog.Err(err2)) c.Logger.Warn("Error while writing response", mlog.Err(err2))
} }
} }
@@ -814,7 +814,7 @@ func sendWarnMetricAckEmail(c *Context, w http.ResponseWriter, r *http.Request)
var ack model.SendWarnMetricAck var ack model.SendWarnMetricAck
if jsonErr := json.NewDecoder(r.Body).Decode(&ack); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&ack); jsonErr != nil {
c.SetInvalidParam("ack") c.SetInvalidParamWithErr("ack", jsonErr)
return return
} }
@@ -916,7 +916,7 @@ func getOnboarding(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(firstAdminCompleteSetupObj); err != nil { if err := json.NewEncoder(w).Encode(firstAdminCompleteSetupObj); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -967,7 +967,7 @@ func TestGetAppliedSchemaMigrations(t *testing.T) {
}) })
t.Run("as a system manager role", func(t *testing.T) { t.Run("as a system manager role", func(t *testing.T) {
_, appErr := th.App.UpdateUserRoles(th.BasicUser2.Id, model.SystemManagerRoleId, false) _, appErr := th.App.UpdateUserRoles(th.Context, th.BasicUser2.Id, model.SystemManagerRoleId, false)
require.Nil(t, appErr) require.Nil(t, appErr)
th.LoginBasic2() th.LoginBasic2()

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

@@ -80,7 +80,7 @@ func (api *API) InitTeam() {
func createTeam(c *Context, w http.ResponseWriter, r *http.Request) { func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
var team model.Team var team model.Team
if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil {
c.SetInvalidParam("team") c.SetInvalidParamWithErr("team", jsonErr)
return return
} }
team.Email = strings.ToLower(team.Email) team.Email = strings.ToLower(team.Email)
@@ -131,7 +131,7 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rteam); err != nil { if err := json.NewEncoder(w).Encode(rteam); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -154,7 +154,7 @@ func getTeam(c *Context, w http.ResponseWriter, r *http.Request) {
c.App.SanitizeTeam(*c.AppContext.Session(), team) c.App.SanitizeTeam(*c.AppContext.Session(), team)
if err := json.NewEncoder(w).Encode(team); err != nil { if err := json.NewEncoder(w).Encode(team); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -177,7 +177,7 @@ func getTeamByName(c *Context, w http.ResponseWriter, r *http.Request) {
c.App.SanitizeTeam(*c.AppContext.Session(), team) c.App.SanitizeTeam(*c.AppContext.Session(), team)
if err := json.NewEncoder(w).Encode(team); err != nil { if err := json.NewEncoder(w).Encode(team); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -189,7 +189,7 @@ func updateTeam(c *Context, w http.ResponseWriter, r *http.Request) {
var team model.Team var team model.Team
if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil {
c.SetInvalidParam("team") c.SetInvalidParamWithErr("team", jsonErr)
return return
} }
@@ -222,7 +222,7 @@ func updateTeam(c *Context, w http.ResponseWriter, r *http.Request) {
c.App.SanitizeTeam(*c.AppContext.Session(), updatedTeam) c.App.SanitizeTeam(*c.AppContext.Session(), updatedTeam)
if err := json.NewEncoder(w).Encode(updatedTeam); err != nil { if err := json.NewEncoder(w).Encode(updatedTeam); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -234,7 +234,7 @@ func patchTeam(c *Context, w http.ResponseWriter, r *http.Request) {
var team model.TeamPatch var team model.TeamPatch
if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil {
c.SetInvalidParam("team") c.SetInvalidParamWithErr("team", jsonErr)
return return
} }
@@ -266,7 +266,7 @@ func patchTeam(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("") c.LogAudit("")
if err := json.NewEncoder(w).Encode(patchedTeam); err != nil { if err := json.NewEncoder(w).Encode(patchedTeam); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -325,7 +325,7 @@ func restoreTeam(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(team); err != nil { if err := json.NewEncoder(w).Encode(team); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -380,7 +380,7 @@ func updateTeamPrivacy(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(team); err != nil { if err := json.NewEncoder(w).Encode(team); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -413,7 +413,7 @@ func regenerateTeamInviteId(c *Context, w http.ResponseWriter, r *http.Request)
c.LogAudit("") c.LogAudit("")
if err := json.NewEncoder(w).Encode(patchedTeam); err != nil { if err := json.NewEncoder(w).Encode(patchedTeam); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -559,7 +559,7 @@ func getTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(team); err != nil { if err := json.NewEncoder(w).Encode(team); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -687,7 +687,7 @@ func addTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
var err *model.AppError var err *model.AppError
var member model.TeamMember var member model.TeamMember
if jsonErr := json.NewDecoder(r.Body).Decode(&member); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&member); jsonErr != nil {
c.Err = model.NewAppError("addTeamMember", "api.team.add_team_member.invalid_body.app_error", nil, "Error in model.TeamMemberFromJSON()", http.StatusBadRequest) c.Err = model.NewAppError("addTeamMember", "api.team.add_team_member.invalid_body.app_error", nil, "Error in model.TeamMemberFromJSON()", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
if member.TeamId != c.Params.TeamId { if member.TeamId != c.Params.TeamId {
@@ -763,7 +763,7 @@ func addTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(tm); err != nil { if err := json.NewEncoder(w).Encode(tm); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -803,7 +803,7 @@ func addUserToTeamFromInvite(c *Context, w http.ResponseWriter, r *http.Request)
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(member); err != nil { if err := json.NewEncoder(w).Encode(member); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -818,7 +818,7 @@ func addTeamMembers(c *Context, w http.ResponseWriter, r *http.Request) {
var err *model.AppError var err *model.AppError
var members []*model.TeamMember var members []*model.TeamMember
if jsonErr := json.NewDecoder(r.Body).Decode(&members); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&members); jsonErr != nil {
c.SetInvalidParam("members") c.SetInvalidParamWithErr("members", jsonErr)
return return
} }
@@ -991,7 +991,7 @@ func getTeamUnread(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(unreadTeam); err != nil { if err := json.NewEncoder(w).Encode(unreadTeam); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -1019,7 +1019,7 @@ func getTeamStats(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(stats); err != nil { if err := json.NewEncoder(w).Encode(stats); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -1067,7 +1067,7 @@ func updateTeamMemberSchemeRoles(c *Context, w http.ResponseWriter, r *http.Requ
var schemeRoles model.SchemeRoles var schemeRoles model.SchemeRoles
if jsonErr := json.NewDecoder(r.Body).Decode(&schemeRoles); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&schemeRoles); jsonErr != nil {
c.SetInvalidParam("scheme_roles") c.SetInvalidParamWithErr("scheme_roles", jsonErr)
return return
} }
@@ -1155,7 +1155,7 @@ func getAllTeams(c *Context, w http.ResponseWriter, r *http.Request) {
func searchTeams(c *Context, w http.ResponseWriter, r *http.Request) { func searchTeams(c *Context, w http.ResponseWriter, r *http.Request) {
var props model.TeamSearch var props model.TeamSearch
if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil {
c.SetInvalidParam("team_search") c.SetInvalidParamWithErr("team_search", jsonErr)
return return
} }
// Only system managers may use the ExcludePolicyConstrained field // Only system managers may use the ExcludePolicyConstrained field
@@ -1476,7 +1476,7 @@ func inviteGuestsToChannels(c *Context, w http.ResponseWriter, r *http.Request)
var guestsInvite model.GuestsInvite var guestsInvite model.GuestsInvite
if jsonErr := json.NewDecoder(r.Body).Decode(&guestsInvite); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&guestsInvite); jsonErr != nil {
c.Err = model.NewAppError("Api4.inviteGuestsToChannels", "api.team.invite_guests_to_channels.invalid_body.app_error", nil, jsonErr.Error(), http.StatusBadRequest) c.Err = model.NewAppError("Api4.inviteGuestsToChannels", "api.team.invite_guests_to_channels.invalid_body.app_error", nil, "", http.StatusBadRequest).Wrap(jsonErr)
return return
} }
auditRec.AddEventParameter("guests_invite", guestsInvite) auditRec.AddEventParameter("guests_invite", guestsInvite)
@@ -1695,7 +1695,7 @@ func updateTeamScheme(c *Context, w http.ResponseWriter, r *http.Request) {
var p model.SchemeIDPatch var p model.SchemeIDPatch
if jsonErr := json.NewDecoder(r.Body).Decode(&p); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&p); jsonErr != nil {
c.SetInvalidParam("scheme_id") c.SetInvalidParamWithErr("scheme_id", jsonErr)
return return
} }

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

@@ -244,7 +244,7 @@ func normalizeDomains(domains string) []string {
func localCreateTeam(c *Context, w http.ResponseWriter, r *http.Request) { func localCreateTeam(c *Context, w http.ResponseWriter, r *http.Request) {
var team model.Team var team model.Team
if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&team); jsonErr != nil {
c.SetInvalidParam("team") c.SetInvalidParamWithErr("team", jsonErr)
return return
} }
@@ -268,6 +268,6 @@ func localCreateTeam(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rteam); err != nil { if err := json.NewEncoder(w).Encode(rteam); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -26,7 +26,7 @@ func getLatestTermsOfService(c *Context, w http.ResponseWriter, r *http.Request)
} }
if err := json.NewEncoder(w).Encode(termsOfService); err != nil { if err := json.NewEncoder(w).Encode(termsOfService); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -67,11 +67,11 @@ func createTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(termsOfService); err != nil { if err := json.NewEncoder(w).Encode(termsOfService); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} else { } else {
if err := json.NewEncoder(w).Encode(oldTermsOfService); err != nil { if err := json.NewEncoder(w).Encode(oldTermsOfService); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
auditRec.Success() auditRec.Success()

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

@@ -31,7 +31,7 @@ func createUpload(c *Context, w http.ResponseWriter, r *http.Request) {
var us model.UploadSession var us model.UploadSession
if jsonErr := json.NewDecoder(r.Body).Decode(&us); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&us); jsonErr != nil {
c.SetInvalidParam("upload") c.SetInvalidParamWithErr("upload", jsonErr)
return return
} }
@@ -74,7 +74,7 @@ func createUpload(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rus); err != nil { if err := json.NewEncoder(w).Encode(rus); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -96,7 +96,7 @@ func getUpload(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(us); err != nil { if err := json.NewEncoder(w).Encode(us); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -152,7 +152,7 @@ func uploadData(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(info); err != nil { if err := json.NewEncoder(w).Encode(info); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -108,7 +108,7 @@ func (api *API) InitUser() {
func createUser(c *Context, w http.ResponseWriter, r *http.Request) { func createUser(c *Context, w http.ResponseWriter, r *http.Request) {
var user model.User var user model.User
if jsonErr := json.NewDecoder(r.Body).Decode(&user); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&user); jsonErr != nil {
c.SetInvalidParam("user") c.SetInvalidParamWithErr("user", jsonErr)
return return
} }
@@ -167,7 +167,7 @@ func createUser(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(ruser); err != nil { if err := json.NewEncoder(w).Encode(ruser); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -221,7 +221,7 @@ func getUser(c *Context, w http.ResponseWriter, r *http.Request) {
c.App.UpdateLastActivityAtIfNeeded(*c.AppContext.Session()) c.App.UpdateLastActivityAtIfNeeded(*c.AppContext.Session())
w.Header().Set(model.HeaderEtagServer, etag) w.Header().Set(model.HeaderEtagServer, etag)
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -283,7 +283,7 @@ func getUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) {
} }
w.Header().Set(model.HeaderEtagServer, etag) w.Header().Set(model.HeaderEtagServer, etag)
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -334,7 +334,7 @@ func getUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) {
c.App.SanitizeProfile(user, c.IsSystemAdmin()) c.App.SanitizeProfile(user, c.IsSystemAdmin())
w.Header().Set(model.HeaderEtagServer, etag) w.Header().Set(model.HeaderEtagServer, etag)
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -479,7 +479,7 @@ func setProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
} }
imageData := imageArray[0] imageData := imageArray[0]
if err := c.App.SetProfileImage(c.Params.UserId, imageData); err != nil { if err := c.App.SetProfileImage(c.AppContext, c.Params.UserId, imageData); err != nil {
c.Err = err c.Err = err
return return
} }
@@ -517,7 +517,7 @@ func setDefaultProfileImage(c *Context, w http.ResponseWriter, r *http.Request)
} }
auditRec.AddMeta("user", user) auditRec.AddMeta("user", user)
if err := c.App.SetDefaultProfileImage(user); err != nil { if err := c.App.SetDefaultProfileImage(c.AppContext, user); err != nil {
c.Err = err c.Err = err
return return
} }
@@ -546,7 +546,7 @@ func getTotalUsersStats(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(stats); err != nil { if err := json.NewEncoder(w).Encode(stats); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -610,7 +610,7 @@ func getFilteredUsersStats(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(stats); err != nil { if err := json.NewEncoder(w).Encode(stats); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -970,7 +970,7 @@ func getKnownUsers(c *Context, w http.ResponseWriter, r *http.Request) {
func searchUsers(c *Context, w http.ResponseWriter, r *http.Request) { func searchUsers(c *Context, w http.ResponseWriter, r *http.Request) {
var props model.UserSearch var props model.UserSearch
if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil {
c.SetInvalidParam("") c.SetInvalidParamWithErr("props", jsonErr)
return return
} }
@@ -1156,7 +1156,7 @@ func autocompleteUsers(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(autocomplete); err != nil { if err := json.NewEncoder(w).Encode(autocomplete); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -1168,7 +1168,7 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
var user model.User var user model.User
if jsonErr := json.NewDecoder(r.Body).Decode(&user); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&user); jsonErr != nil {
c.SetInvalidParam("user") c.SetInvalidParamWithErr("user", jsonErr)
return return
} }
@@ -1227,7 +1227,7 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
} }
} }
ruser, err := c.App.UpdateUserAsUser(&user, c.IsSystemAdmin()) ruser, err := c.App.UpdateUserAsUser(c.AppContext, &user, c.IsSystemAdmin())
if err != nil { if err != nil {
c.Err = err c.Err = err
return return
@@ -1238,7 +1238,7 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("") c.LogAudit("")
if err := json.NewEncoder(w).Encode(ruser); err != nil { if err := json.NewEncoder(w).Encode(ruser); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -1250,7 +1250,7 @@ func patchUser(c *Context, w http.ResponseWriter, r *http.Request) {
var patch model.UserPatch var patch model.UserPatch
if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&patch); jsonErr != nil {
c.SetInvalidParam("user") c.SetInvalidParamWithErr("user", jsonErr)
return return
} }
@@ -1306,7 +1306,7 @@ func patchUser(c *Context, w http.ResponseWriter, r *http.Request) {
} }
} }
ruser, err := c.App.PatchUser(c.Params.UserId, &patch, c.IsSystemAdmin()) ruser, err := c.App.PatchUser(c.AppContext, c.Params.UserId, &patch, c.IsSystemAdmin())
if err != nil { if err != nil {
c.Err = err c.Err = err
return return
@@ -1319,7 +1319,7 @@ func patchUser(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("") c.LogAudit("")
if err := json.NewEncoder(w).Encode(ruser); err != nil { if err := json.NewEncoder(w).Encode(ruser); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -1413,7 +1413,7 @@ func updateUserRoles(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
user, err := c.App.UpdateUserRoles(c.Params.UserId, newRoles, true) user, err := c.App.UpdateUserRoles(c.AppContext, c.Params.UserId, newRoles, true)
if err != nil { if err != nil {
c.Err = err c.Err = err
return return
@@ -1515,7 +1515,7 @@ func updateUserAuth(c *Context, w http.ResponseWriter, r *http.Request) {
var userAuth model.UserAuth var userAuth model.UserAuth
if jsonErr := json.NewDecoder(r.Body).Decode(&userAuth); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&userAuth); jsonErr != nil {
c.SetInvalidParam("user") c.SetInvalidParamWithErr("user", jsonErr)
return return
} }
@@ -1542,7 +1542,7 @@ func updateUserAuth(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit(fmt.Sprintf("updated user %s auth to service=%v", c.Params.UserId, user.AuthService)) c.LogAudit(fmt.Sprintf("updated user %s auth to service=%v", c.Params.UserId, user.AuthService))
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -1588,7 +1588,7 @@ func updateUserMfa(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("attempt") c.LogAudit("attempt")
if err := c.App.UpdateMfa(activate, c.Params.UserId, code); err != nil { if err := c.App.UpdateMfa(c.AppContext, activate, c.Params.UserId, code); err != nil {
c.Err = err c.Err = err
return return
} }
@@ -1627,7 +1627,7 @@ func generateMfaSecret(c *Context, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Pragma", "no-cache") w.Header().Set("Pragma", "no-cache")
w.Header().Set("Expires", "0") w.Header().Set("Expires", "0")
if err := json.NewEncoder(w).Encode(secret); err != nil { if err := json.NewEncoder(w).Encode(secret); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -1675,9 +1675,9 @@ func updatePassword(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
err = c.App.UpdatePasswordAsUser(c.Params.UserId, currentPassword, newPassword) err = c.App.UpdatePasswordAsUser(c.AppContext, c.Params.UserId, currentPassword, newPassword)
} else if canUpdatePassword { } else if canUpdatePassword {
err = c.App.UpdatePasswordByUserIdSendEmail(c.Params.UserId, newPassword, c.AppContext.T("api.user.reset_password.method")) err = c.App.UpdatePasswordByUserIdSendEmail(c.AppContext, c.Params.UserId, newPassword, c.AppContext.T("api.user.reset_password.method"))
} else { } else {
err = model.NewAppError("updatePassword", "api.user.update_password.context.app_error", nil, "", http.StatusForbidden) err = model.NewAppError("updatePassword", "api.user.update_password.context.app_error", nil, "", http.StatusForbidden)
} }
@@ -1711,7 +1711,7 @@ func resetPassword(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.AddMeta("token", token) auditRec.AddMeta("token", token)
c.LogAudit("attempt - token=" + token) c.LogAudit("attempt - token=" + token)
if err := c.App.ResetPasswordFromToken(token, newPassword); err != nil { if err := c.App.ResetPasswordFromToken(c.AppContext, token, newPassword); err != nil {
c.LogAudit("fail - token=" + token) c.LogAudit("fail - token=" + token)
c.Err = err c.Err = err
return return
@@ -1827,7 +1827,7 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
certPem, certSubject, certEmail := c.App.CheckForClientSideCert(r) certPem, certSubject, certEmail := c.App.CheckForClientSideCert(r)
mlog.Debug("Client Cert", mlog.String("cert_subject", certSubject), mlog.String("cert_email", certEmail)) c.Logger.Debug("Client Cert", mlog.String("cert_subject", certSubject), mlog.String("cert_email", certEmail))
if certPem == "" || certEmail == "" { if certPem == "" || certEmail == "" {
c.Err = model.NewAppError("ClientSideCertMissing", "api.user.login.client_side_cert.certificate.app_error", nil, "", http.StatusBadRequest) c.Err = model.NewAppError("ClientSideCertMissing", "api.user.login.client_side_cert.certificate.app_error", nil, "", http.StatusBadRequest)
@@ -1895,7 +1895,7 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.Success() auditRec.Success()
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -2170,7 +2170,7 @@ func getUserAudits(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec.AddMeta("audits_per_page", c.Params.LogsPerPage) auditRec.AddMeta("audits_per_page", c.Params.LogsPerPage)
if err := json.NewEncoder(w).Encode(audits); err != nil { if err := json.NewEncoder(w).Encode(audits); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -2186,7 +2186,7 @@ func verifyUserEmail(c *Context, w http.ResponseWriter, r *http.Request) {
auditRec := c.MakeAuditRecord("verifyUserEmail", audit.Fail) auditRec := c.MakeAuditRecord("verifyUserEmail", audit.Fail)
defer c.LogAuditRec(auditRec) defer c.LogAuditRec(auditRec)
if err := c.App.VerifyEmailFromToken(token); err != nil { if err := c.App.VerifyEmailFromToken(c.AppContext, token); err != nil {
c.Err = model.NewAppError("verifyUserEmail", "api.user.verify_email.bad_link.app_error", nil, err.Error(), http.StatusBadRequest) c.Err = model.NewAppError("verifyUserEmail", "api.user.verify_email.bad_link.app_error", nil, err.Error(), http.StatusBadRequest)
return return
} }
@@ -2235,7 +2235,7 @@ func sendVerificationEmail(c *Context, w http.ResponseWriter, r *http.Request) {
func switchAccountType(c *Context, w http.ResponseWriter, r *http.Request) { func switchAccountType(c *Context, w http.ResponseWriter, r *http.Request) {
var switchRequest model.SwitchRequest var switchRequest model.SwitchRequest
if jsonErr := json.NewDecoder(r.Body).Decode(&switchRequest); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&switchRequest); jsonErr != nil {
c.SetInvalidParam("switch_request") c.SetInvalidParamWithErr("switch_request", jsonErr)
return return
} }
@@ -2297,7 +2297,7 @@ func createUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
var accessToken model.UserAccessToken var accessToken model.UserAccessToken
if jsonErr := json.NewDecoder(r.Body).Decode(&accessToken); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&accessToken); jsonErr != nil {
c.SetInvalidParam("user_access_token") c.SetInvalidParamWithErr("user_access_token", jsonErr)
return return
} }
@@ -2332,7 +2332,7 @@ func createUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success - token_id=" + token.Id) c.LogAudit("success - token_id=" + token.Id)
if err := json.NewEncoder(w).Encode(token); err != nil { if err := json.NewEncoder(w).Encode(token); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -2344,7 +2344,7 @@ func searchUserAccessTokens(c *Context, w http.ResponseWriter, r *http.Request)
var props model.UserAccessTokenSearch var props model.UserAccessTokenSearch
if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&props); jsonErr != nil {
c.SetInvalidParam("user_access_token_search") c.SetInvalidParamWithErr("user_access_token_search", jsonErr)
return return
} }
@@ -2443,7 +2443,7 @@ func getUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(accessToken); err != nil { if err := json.NewEncoder(w).Encode(accessToken); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -2628,7 +2628,7 @@ func getUserTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if err := json.NewEncoder(w).Encode(result); err != nil { if err := json.NewEncoder(w).Encode(result); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -2728,7 +2728,7 @@ func publishUserTyping(c *Context, w http.ResponseWriter, r *http.Request) {
var typingRequest model.TypingRequest var typingRequest model.TypingRequest
if jsonErr := json.NewDecoder(r.Body).Decode(&typingRequest); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&typingRequest); jsonErr != nil {
c.SetInvalidParam("typing_request") c.SetInvalidParamWithErr("typing_request", jsonErr)
return return
} }
@@ -2781,7 +2781,7 @@ func verifyUserEmailWithoutToken(c *Context, w http.ResponseWriter, r *http.Requ
c.LogAudit("user verified") c.LogAudit("user verified")
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -2871,7 +2871,7 @@ func getChannelMembersForUser(c *Context, w http.ResponseWriter, r *http.Request
} }
if err := json.NewEncoder(w).Encode(members); err != nil { if err := json.NewEncoder(w).Encode(members); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -3014,7 +3014,7 @@ func getThreadForUser(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(thread); err != nil { if err := json.NewEncoder(w).Encode(thread); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -3085,7 +3085,7 @@ func getThreadsForUser(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(threads); err != nil { if err := json.NewEncoder(w).Encode(threads); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -3113,7 +3113,7 @@ func updateReadStateThreadByUser(c *Context, w http.ResponseWriter, r *http.Requ
} }
if err := json.NewEncoder(w).Encode(thread); err != nil { if err := json.NewEncoder(w).Encode(thread); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
auditRec.Success() auditRec.Success()
@@ -3149,7 +3149,7 @@ func setUnreadThreadByPostId(c *Context, w http.ResponseWriter, r *http.Request)
} }
if err := json.NewEncoder(w).Encode(thread); err != nil { if err := json.NewEncoder(w).Encode(thread); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
auditRec.Success() auditRec.Success()
@@ -3285,6 +3285,6 @@ func getRecentSearches(c *Context, w http.ResponseWriter, r *http.Request) {
} }
if err := json.NewEncoder(w).Encode(searchParams); err != nil { if err := json.NewEncoder(w).Encode(searchParams); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -225,7 +225,7 @@ func localGetUser(c *Context, w http.ResponseWriter, r *http.Request) {
c.App.SanitizeProfile(user, c.IsSystemAdmin()) c.App.SanitizeProfile(user, c.IsSystemAdmin())
w.Header().Set(model.HeaderEtagServer, etag) w.Header().Set(model.HeaderEtagServer, etag)
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -308,7 +308,7 @@ func localGetUserByUsername(c *Context, w http.ResponseWriter, r *http.Request)
c.App.SanitizeProfile(user, c.IsSystemAdmin()) c.App.SanitizeProfile(user, c.IsSystemAdmin())
w.Header().Set(model.HeaderEtagServer, etag) w.Header().Set(model.HeaderEtagServer, etag)
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -339,7 +339,7 @@ func localGetUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) {
c.App.SanitizeProfile(user, c.IsSystemAdmin()) c.App.SanitizeProfile(user, c.IsSystemAdmin())
w.Header().Set(model.HeaderEtagServer, etag) w.Header().Set(model.HeaderEtagServer, etag)
if err := json.NewEncoder(w).Encode(user); err != nil { if err := json.NewEncoder(w).Encode(user); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -643,7 +643,7 @@ func TestGetUser(t *testing.T) {
user := th.CreateUser() user := th.CreateUser()
user.Props = map[string]string{"testpropkey": "testpropvalue"} user.Props = map[string]string{"testpropkey": "testpropvalue"}
th.App.UpdateUser(user, false) th.App.UpdateUser(th.Context, user, false)
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
ruser, resp, err := client.GetUser(user.Id, "") ruser, resp, err := client.GetUser(user.Id, "")
@@ -699,7 +699,7 @@ func TestGetUserWithAcceptedTermsOfServiceForOtherUser(t *testing.T) {
tos, _ := th.App.CreateTermsOfService("Dummy TOS", user.Id) tos, _ := th.App.CreateTermsOfService("Dummy TOS", user.Id)
th.App.UpdateUser(user, false) th.App.UpdateUser(th.Context, user, false)
ruser, _, err := th.Client.GetUser(user.Id, "") ruser, _, err := th.Client.GetUser(user.Id, "")
require.NoError(t, err) require.NoError(t, err)
@@ -785,7 +785,7 @@ func TestGetBotUser(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
@@ -4038,7 +4038,7 @@ func TestCreateUserAccessToken(t *testing.T) {
defer th.TearDown() defer th.TearDown()
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = false }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = false })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
_, resp, err := client.CreateUserAccessToken(th.BasicUser.Id, "test token") _, resp, err := client.CreateUserAccessToken(th.BasicUser.Id, "test token")
@@ -4052,7 +4052,7 @@ func TestCreateUserAccessToken(t *testing.T) {
defer th.TearDown() defer th.TearDown()
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
rtoken, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token") rtoken, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
@@ -4117,7 +4117,7 @@ func TestCreateUserAccessToken(t *testing.T) {
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4159,7 +4159,7 @@ func TestCreateUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4219,7 +4219,7 @@ func TestGetUserAccessToken(t *testing.T) {
defer th.TearDown() defer th.TearDown()
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token") token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
@@ -4239,7 +4239,7 @@ func TestGetUserAccessToken(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token") token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
@@ -4264,7 +4264,7 @@ func TestGetUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4312,7 +4312,7 @@ func TestGetUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionReadUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionReadUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4355,7 +4355,7 @@ func TestGetUserAccessTokensForUser(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
_, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token") _, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
@@ -4380,7 +4380,7 @@ func TestGetUserAccessTokensForUser(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
_, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token") _, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
@@ -4407,7 +4407,7 @@ func TestGetUserAccessTokens(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
_, resp, err := th.Client.GetUserAccessTokens(0, 100) _, resp, err := th.Client.GetUserAccessTokens(0, 100)
require.Error(t, err) require.Error(t, err)
@@ -4420,7 +4420,7 @@ func TestGetUserAccessTokens(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
_, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token 2") _, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token 2")
require.NoError(t, err) require.NoError(t, err)
@@ -4440,7 +4440,7 @@ func TestGetUserAccessTokens(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
_, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token 2") _, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token 2")
require.NoError(t, err) require.NoError(t, err)
@@ -4463,7 +4463,7 @@ func TestSearchUserAccessToken(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, testDescription) token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, testDescription)
require.NoError(t, err) require.NoError(t, err)
@@ -4499,7 +4499,7 @@ func TestRevokeUserAccessToken(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) { th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
token, _, err := client.CreateUserAccessToken(th.BasicUser.Id, "test token") token, _, err := client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
@@ -4537,7 +4537,7 @@ func TestRevokeUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4581,7 +4581,7 @@ func TestRevokeUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4620,7 +4620,7 @@ func TestDisableUserAccessToken(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token") token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
assertToken(t, th, token, th.BasicUser.Id) assertToken(t, th, token, th.BasicUser.Id)
@@ -4656,7 +4656,7 @@ func TestDisableUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4700,7 +4700,7 @@ func TestDisableUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4739,7 +4739,7 @@ func TestEnableUserAccessToken(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token") token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, "test token")
require.NoError(t, err) require.NoError(t, err)
assertToken(t, th, token, th.BasicUser.Id) assertToken(t, th, token, th.BasicUser.Id)
@@ -4783,7 +4783,7 @@ func TestEnableUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4830,7 +4830,7 @@ func TestEnableUserAccessToken(t *testing.T) {
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionCreateUserAccessToken.Id, model.TeamUserRoleId)
th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId) th.AddPermissionToRole(model.PermissionRevokeUserAccessToken.Id, model.TeamUserRoleId)
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.TeamUserRoleId, false)
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.EnableBotAccountCreation = true *cfg.ServiceSettings.EnableBotAccountCreation = true
}) })
@@ -4873,7 +4873,7 @@ func TestUserAccessTokenInactiveUser(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, testDescription) token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, testDescription)
require.NoError(t, err) require.NoError(t, err)
@@ -4896,7 +4896,7 @@ func TestUserAccessTokenDisableConfig(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false) th.App.UpdateUserRoles(th.Context, th.BasicUser.Id, model.SystemUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, testDescription) token, _, err := th.Client.CreateUserAccessToken(th.BasicUser.Id, testDescription)
require.NoError(t, err) require.NoError(t, err)
@@ -5267,7 +5267,7 @@ func TestPromoteGuestToUser(t *testing.T) {
th.App.Srv().SetLicense(model.NewTestLicense()) th.App.Srv().SetLicense(model.NewTestLicense())
user := th.BasicUser user := th.BasicUser
th.App.UpdateUserRoles(user.Id, model.SystemGuestRoleId, false) th.App.UpdateUserRoles(th.Context, user.Id, model.SystemGuestRoleId, false)
th.TestForSystemAdminAndLocal(t, func(t *testing.T, c *model.Client4) { th.TestForSystemAdminAndLocal(t, func(t *testing.T, c *model.Client4) {
_, _, err := c.GetUser(user.Id, "") _, _, err := c.GetUser(user.Id, "")

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

@@ -30,7 +30,7 @@ func (api *API) InitWebhook() {
func createIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { func createIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
var hook model.IncomingWebhook var hook model.IncomingWebhook
if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil {
c.SetInvalidParam("incoming_webhook") c.SetInvalidParamWithErr("incoming_webhook", jsonErr)
return return
} }
@@ -86,7 +86,7 @@ func createIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(incomingHook); err != nil { if err := json.NewEncoder(w).Encode(incomingHook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -98,7 +98,7 @@ func updateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
var updatedHook model.IncomingWebhook var updatedHook model.IncomingWebhook
if jsonErr := json.NewDecoder(r.Body).Decode(&updatedHook); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&updatedHook); jsonErr != nil {
c.SetInvalidParam("incoming_webhook") c.SetInvalidParamWithErr("incoming_webhook", jsonErr)
return return
} }
@@ -173,7 +173,7 @@ func updateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(incomingHook); err != nil { if err := json.NewEncoder(w).Encode(incomingHook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -273,7 +273,7 @@ func getIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(hook); err != nil { if err := json.NewEncoder(w).Encode(hook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -342,7 +342,7 @@ func updateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
var updatedHook model.OutgoingWebhook var updatedHook model.OutgoingWebhook
if jsonErr := json.NewDecoder(r.Body).Decode(&updatedHook); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&updatedHook); jsonErr != nil {
c.SetInvalidParam("outgoing_webhook") c.SetInvalidParamWithErr("outgoing_webhook", jsonErr)
return return
} }
@@ -395,14 +395,14 @@ func updateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(rhook); err != nil { if err := json.NewEncoder(w).Encode(rhook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
func createOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { func createOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
var hook model.OutgoingWebhook var hook model.OutgoingWebhook
if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil {
c.SetInvalidParam("outgoing_webhook") c.SetInvalidParamWithErr("outgoing_webhook", jsonErr)
return return
} }
@@ -446,7 +446,7 @@ func createOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rhook); err != nil { if err := json.NewEncoder(w).Encode(rhook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -545,7 +545,7 @@ func getOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(hook); err != nil { if err := json.NewEncoder(w).Encode(hook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
@@ -592,7 +592,7 @@ func regenOutgoingHookToken(c *Context, w http.ResponseWriter, r *http.Request)
c.LogAudit("success") c.LogAudit("success")
if err := json.NewEncoder(w).Encode(rhook); err != nil { if err := json.NewEncoder(w).Encode(rhook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -29,7 +29,7 @@ func (api *API) InitWebhookLocal() {
func localCreateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { func localCreateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
var hook model.IncomingWebhook var hook model.IncomingWebhook
if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil {
c.SetInvalidParam("incoming_webhook") c.SetInvalidParamWithErr("incoming_webhook", jsonErr)
return return
} }
@@ -68,14 +68,14 @@ func localCreateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request)
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(incomingHook); err != nil { if err := json.NewEncoder(w).Encode(incomingHook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }
func localCreateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { func localCreateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
var hook model.OutgoingWebhook var hook model.OutgoingWebhook
if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil { if jsonErr := json.NewDecoder(r.Body).Decode(&hook); jsonErr != nil {
c.SetInvalidParam("outgoing_webhook") c.SetInvalidParamWithErr("outgoing_webhook", jsonErr)
return return
} }
@@ -109,6 +109,6 @@ func localCreateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request)
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(rhook); err != nil { if err := json.NewEncoder(w).Encode(rhook); err != nil {
mlog.Warn("Error while writing response", mlog.Err(err)) c.Logger.Warn("Error while writing response", mlog.Err(err))
} }
} }

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

@@ -80,7 +80,7 @@ type AppIface interface {
// Use GetLastAccessiblePostTime() to access the result. // Use GetLastAccessiblePostTime() to access the result.
ComputeLastAccessiblePostTime() error ComputeLastAccessiblePostTime() error
// ConvertBotToUser converts a bot to user. // ConvertBotToUser converts a bot to user.
ConvertBotToUser(bot *model.Bot, userPatch *model.UserPatch, sysadmin bool) (*model.User, *model.AppError) ConvertBotToUser(c request.CTX, bot *model.Bot, userPatch *model.UserPatch, sysadmin bool) (*model.User, *model.AppError)
// ConvertUserToBot converts a user to bot. // ConvertUserToBot converts a user to bot.
ConvertUserToBot(user *model.User) (*model.Bot, *model.AppError) ConvertUserToBot(user *model.User) (*model.Bot, *model.AppError)
// CreateBot creates the given bot and corresponding user. // CreateBot creates the given bot and corresponding user.
@@ -94,10 +94,10 @@ type AppIface interface {
CreateDefaultMemberships(c *request.Context, since int64, includeRemovedMembers bool) error CreateDefaultMemberships(c *request.Context, since int64, includeRemovedMembers bool) error
// CreateGuest creates a guest and sets several fields of the returned User struct to // CreateGuest creates a guest and sets several fields of the returned User struct to
// their zero values. // their zero values.
CreateGuest(c *request.Context, user *model.User) (*model.User, *model.AppError) CreateGuest(c request.CTX, user *model.User) (*model.User, *model.AppError)
// CreateUser creates a user and sets several fields of the returned User struct to // CreateUser creates a user and sets several fields of the returned User struct to
// their zero values. // their zero values.
CreateUser(c *request.Context, user *model.User) (*model.User, *model.AppError) CreateUser(c request.CTX, user *model.User) (*model.User, *model.AppError)
// Creates and stores FileInfos for a post created before the FileInfos table existed. // Creates and stores FileInfos for a post created before the FileInfos table existed.
MigrateFilenamesToFileInfos(post *model.Post) []*model.FileInfo MigrateFilenamesToFileInfos(post *model.Post) []*model.FileInfo
// DefaultChannelNames returns the list of system-wide default channel names. // DefaultChannelNames returns the list of system-wide default channel names.
@@ -381,10 +381,6 @@ type AppIface interface {
// upload, returning a rejection error. In this case FileInfo would have // upload, returning a rejection error. In this case FileInfo would have
// contained the last "good" FileInfo before the execution of that plugin. // contained the last "good" FileInfo before the execution of that plugin.
UploadFileX(c *request.Context, channelID, name string, input io.Reader, opts ...func(*UploadFileTask)) (*model.FileInfo, *model.AppError) UploadFileX(c *request.Context, channelID, name string, input io.Reader, opts ...func(*UploadFileTask)) (*model.FileInfo, *model.AppError)
// Uploads some files to the given team and channel as the given user. files and filenames should have
// the same length. clientIds should either not be provided or have the same length as files and filenames.
// The provided files should be closed by the caller so that they are not leaked.
UploadFiles(c *request.Context, teamID string, channelID string, userID string, files []io.ReadCloser, filenames []string, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError)
// UserIsInAdminRoleGroup returns true at least one of the user's groups are configured to set the members as // UserIsInAdminRoleGroup returns true at least one of the user's groups are configured to set the members as
// admins in the given syncable. // admins in the given syncable.
UserIsInAdminRoleGroup(userID, syncableID string, syncableType model.GroupSyncableType) (bool, *model.AppError) UserIsInAdminRoleGroup(userID, syncableID string, syncableType model.GroupSyncableType) (bool, *model.AppError)
@@ -500,10 +496,10 @@ type AppIface interface {
CreateTermsOfService(text, userID string) (*model.TermsOfService, *model.AppError) CreateTermsOfService(text, userID string) (*model.TermsOfService, *model.AppError)
CreateUploadSession(c request.CTX, us *model.UploadSession) (*model.UploadSession, *model.AppError) CreateUploadSession(c request.CTX, us *model.UploadSession) (*model.UploadSession, *model.AppError)
CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError)
CreateUserAsAdmin(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) CreateUserAsAdmin(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError)
CreateUserFromSignup(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) CreateUserFromSignup(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError)
CreateUserWithInviteId(c *request.Context, user *model.User, inviteId, redirect string) (*model.User, *model.AppError) CreateUserWithInviteId(c request.CTX, user *model.User, inviteId, redirect string) (*model.User, *model.AppError)
CreateUserWithToken(c *request.Context, user *model.User, token *model.Token) (*model.User, *model.AppError) CreateUserWithToken(c request.CTX, user *model.User, token *model.Token) (*model.User, *model.AppError)
CreateWebhookPost(c request.CTX, userID string, channel *model.Channel, text, overrideUsername, overrideIconURL, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError) CreateWebhookPost(c request.CTX, userID string, channel *model.Channel, text, overrideUsername, overrideIconURL, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError)
DBHealthCheckDelete() error DBHealthCheckDelete() error
DBHealthCheckWrite() error DBHealthCheckWrite() error
@@ -537,7 +533,7 @@ type AppIface interface {
DeleteSharedChannelRemote(id string) (bool, error) DeleteSharedChannelRemote(id string) (bool, error)
DeleteSidebarCategory(c request.CTX, userID, teamID, categoryId string) *model.AppError DeleteSidebarCategory(c request.CTX, userID, teamID, categoryId string) *model.AppError
DeleteToken(token *model.Token) *model.AppError DeleteToken(token *model.Token) *model.AppError
DisableAutoResponder(userID string, asAdmin bool) *model.AppError DisableAutoResponder(c request.CTX, userID string, asAdmin bool) *model.AppError
DisableUserAccessToken(token *model.UserAccessToken) *model.AppError DisableUserAccessToken(token *model.UserAccessToken) *model.AppError
DoAppMigrations() DoAppMigrations()
DoCommandRequest(cmd *model.Command, p url.Values) (*model.Command, *model.CommandResponse, *model.AppError) DoCommandRequest(cmd *model.Command, p url.Values) (*model.Command, *model.CommandResponse, *model.AppError)
@@ -875,7 +871,7 @@ type AppIface interface {
IsUserSignUpAllowed() *model.AppError IsUserSignUpAllowed() *model.AppError
JoinChannel(c request.CTX, channel *model.Channel, userID string) *model.AppError JoinChannel(c request.CTX, channel *model.Channel, userID string) *model.AppError
JoinDefaultChannels(c request.CTX, teamID string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError JoinDefaultChannels(c request.CTX, teamID string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError
JoinUserToTeam(c *request.Context, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) JoinUserToTeam(c request.CTX, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError)
Ldap() einterfaces.LdapInterface Ldap() einterfaces.LdapInterface
LeaveChannel(c request.CTX, channelID string, userID string) *model.AppError LeaveChannel(c request.CTX, channelID string, userID string) *model.AppError
LeaveTeam(c *request.Context, team *model.Team, user *model.User, requestorId string) *model.AppError LeaveTeam(c *request.Context, team *model.Team, user *model.User, requestorId string) *model.AppError
@@ -913,7 +909,7 @@ type AppIface interface {
PatchRole(role *model.Role, patch *model.RolePatch) (*model.Role, *model.AppError) PatchRole(role *model.Role, patch *model.RolePatch) (*model.Role, *model.AppError)
PatchScheme(scheme *model.Scheme, patch *model.SchemePatch) (*model.Scheme, *model.AppError) PatchScheme(scheme *model.Scheme, patch *model.SchemePatch) (*model.Scheme, *model.AppError)
PatchTeam(teamID string, patch *model.TeamPatch) (*model.Team, *model.AppError) PatchTeam(teamID string, patch *model.TeamPatch) (*model.Team, *model.AppError)
PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) PatchUser(c request.CTX, userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError)
PermanentDeleteAllUsers(c *request.Context) *model.AppError PermanentDeleteAllUsers(c *request.Context) *model.AppError
PermanentDeleteChannel(c request.CTX, channel *model.Channel) *model.AppError PermanentDeleteChannel(c request.CTX, channel *model.Channel) *model.AppError
PermanentDeleteTeam(c request.CTX, team *model.Team) *model.AppError PermanentDeleteTeam(c request.CTX, team *model.Team) *model.AppError
@@ -947,7 +943,7 @@ type AppIface interface {
RemoveAllDeactivatedMembersFromChannel(c request.CTX, channel *model.Channel) *model.AppError RemoveAllDeactivatedMembersFromChannel(c request.CTX, channel *model.Channel) *model.AppError
RemoveChannelsFromRetentionPolicy(policyID string, channelIDs []string) *model.AppError RemoveChannelsFromRetentionPolicy(policyID string, channelIDs []string) *model.AppError
RemoveConfigListener(id string) RemoveConfigListener(id string)
RemoveCustomStatus(userID string) *model.AppError RemoveCustomStatus(c request.CTX, userID string) *model.AppError
RemoveDirectory(path string) *model.AppError RemoveDirectory(path string) *model.AppError
RemoveFile(path string) *model.AppError RemoveFile(path string) *model.AppError
RemoveLdapPrivateCertificate() *model.AppError RemoveLdapPrivateCertificate() *model.AppError
@@ -962,7 +958,7 @@ type AppIface interface {
RemoveUserFromTeam(c *request.Context, teamID string, userID string, requestorId string) *model.AppError RemoveUserFromTeam(c *request.Context, teamID string, userID string, requestorId string) *model.AppError
RemoveUsersFromChannelNotMemberOfTeam(c request.CTX, remover *model.User, channel *model.Channel, team *model.Team) *model.AppError RemoveUsersFromChannelNotMemberOfTeam(c request.CTX, remover *model.User, channel *model.Channel, team *model.Team) *model.AppError
RequestLicenseAndAckWarnMetric(c *request.Context, warnMetricId string, isBot bool) *model.AppError RequestLicenseAndAckWarnMetric(c *request.Context, warnMetricId string, isBot bool) *model.AppError
ResetPasswordFromToken(userSuppliedTokenString, newPassword string) *model.AppError ResetPasswordFromToken(c request.CTX, userSuppliedTokenString, newPassword string) *model.AppError
ResetPermissionsSystem() *model.AppError ResetPermissionsSystem() *model.AppError
ResetSamlAuthDataToEmail(includeDeleted bool, dryRun bool, userIDs []string) (numAffected int, appErr *model.AppError) ResetSamlAuthDataToEmail(includeDeleted bool, dryRun bool, userIDs []string) (numAffected int, appErr *model.AppError)
RestoreChannel(c request.CTX, channel *model.Channel, userID string) (*model.Channel, *model.AppError) RestoreChannel(c request.CTX, channel *model.Channel, userID string) (*model.Channel, *model.AppError)
@@ -1037,16 +1033,16 @@ type AppIface interface {
SetActiveChannel(c request.CTX, userID string, channelID string) *model.AppError SetActiveChannel(c request.CTX, userID string, channelID string) *model.AppError
SetAutoResponderStatus(user *model.User, oldNotifyProps model.StringMap) SetAutoResponderStatus(user *model.User, oldNotifyProps model.StringMap)
SetChannels(ch *Channels) SetChannels(ch *Channels)
SetCustomStatus(userID string, cs *model.CustomStatus) *model.AppError SetCustomStatus(c request.CTX, userID string, cs *model.CustomStatus) *model.AppError
SetDefaultProfileImage(user *model.User) *model.AppError SetDefaultProfileImage(c request.CTX, user *model.User) *model.AppError
SetPhase2PermissionsMigrationStatus(isComplete bool) error SetPhase2PermissionsMigrationStatus(isComplete bool) error
SetPluginKey(pluginID string, key string, value []byte) *model.AppError SetPluginKey(pluginID string, key string, value []byte) *model.AppError
SetPluginKeyWithExpiry(pluginID string, key string, value []byte, expireInSeconds int64) *model.AppError SetPluginKeyWithExpiry(pluginID string, key string, value []byte, expireInSeconds int64) *model.AppError
SetPluginKeyWithOptions(pluginID string, key string, value []byte, options model.PluginKVSetOptions) (bool, *model.AppError) SetPluginKeyWithOptions(pluginID string, key string, value []byte, options model.PluginKVSetOptions) (bool, *model.AppError)
SetPostReminder(postID, userID string, targetTime int64) *model.AppError SetPostReminder(postID, userID string, targetTime int64) *model.AppError
SetProfileImage(userID string, imageData *multipart.FileHeader) *model.AppError SetProfileImage(c request.CTX, userID string, imageData *multipart.FileHeader) *model.AppError
SetProfileImageFromFile(userID string, file io.Reader) *model.AppError SetProfileImageFromFile(c request.CTX, userID string, file io.Reader) *model.AppError
SetProfileImageFromMultiPartFile(userID string, file multipart.File) *model.AppError SetProfileImageFromMultiPartFile(c request.CTX, userID string, file multipart.File) *model.AppError
SetRemoteClusterLastPingAt(remoteClusterId string) *model.AppError SetRemoteClusterLastPingAt(remoteClusterId string) *model.AppError
SetSamlIdpCertificateFromMetadata(data []byte) *model.AppError SetSamlIdpCertificateFromMetadata(data []byte) *model.AppError
SetSearchEngine(se *searchengine.Broker) SetSearchEngine(se *searchengine.Broker)
@@ -1096,15 +1092,15 @@ type AppIface interface {
UpdateHashedPasswordByUserId(userID, newHashedPassword string) *model.AppError UpdateHashedPasswordByUserId(userID, newHashedPassword string) *model.AppError
UpdateIncomingWebhook(oldHook, updatedHook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError) UpdateIncomingWebhook(oldHook, updatedHook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError)
UpdateLastActivityAtIfNeeded(session model.Session) UpdateLastActivityAtIfNeeded(session model.Session)
UpdateMfa(activate bool, userID, token string) *model.AppError UpdateMfa(c request.CTX, activate bool, userID, token string) *model.AppError
UpdateMobileAppBadge(userID string) UpdateMobileAppBadge(userID string)
UpdateOAuthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError) UpdateOAuthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError)
UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provider einterfaces.OAuthProvider, service string, tokenUser *model.User) *model.AppError UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provider einterfaces.OAuthProvider, service string, tokenUser *model.User) *model.AppError
UpdateOutgoingWebhook(c request.CTX, oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError) UpdateOutgoingWebhook(c request.CTX, oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
UpdatePassword(user *model.User, newPassword string) *model.AppError UpdatePassword(user *model.User, newPassword string) *model.AppError
UpdatePasswordAsUser(userID, currentPassword, newPassword string) *model.AppError UpdatePasswordAsUser(c request.CTX, userID, currentPassword, newPassword string) *model.AppError
UpdatePasswordByUserIdSendEmail(userID, newPassword, method string) *model.AppError UpdatePasswordByUserIdSendEmail(c request.CTX, userID, newPassword, method string) *model.AppError
UpdatePasswordSendEmail(user *model.User, newPassword, method string) *model.AppError UpdatePasswordSendEmail(c request.CTX, user *model.User, newPassword, method string) *model.AppError
UpdatePost(c *request.Context, post *model.Post, safeUpdate bool) (*model.Post, *model.AppError) UpdatePost(c *request.Context, post *model.Post, safeUpdate bool) (*model.Post, *model.AppError)
UpdatePreferences(userID string, preferences model.Preferences) *model.AppError UpdatePreferences(userID string, preferences model.Preferences) *model.AppError
UpdateRemoteCluster(rc *model.RemoteCluster) (*model.RemoteCluster, *model.AppError) UpdateRemoteCluster(rc *model.RemoteCluster) (*model.RemoteCluster, *model.AppError)
@@ -1125,20 +1121,19 @@ type AppIface interface {
UpdateThreadReadForUser(c request.CTX, currentSessionId, userID, teamID, threadID string, timestamp int64) (*model.ThreadResponse, *model.AppError) UpdateThreadReadForUser(c request.CTX, currentSessionId, userID, teamID, threadID string, timestamp int64) (*model.ThreadResponse, *model.AppError)
UpdateThreadReadForUserByPost(c request.CTX, currentSessionId, userID, teamID, threadID, postID string) (*model.ThreadResponse, *model.AppError) UpdateThreadReadForUserByPost(c request.CTX, currentSessionId, userID, teamID, threadID, postID string) (*model.ThreadResponse, *model.AppError)
UpdateThreadsReadForUser(userID, teamID string) *model.AppError UpdateThreadsReadForUser(userID, teamID string) *model.AppError
UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError) UpdateUser(c request.CTX, user *model.User, sendNotifications bool) (*model.User, *model.AppError)
UpdateUserActive(c *request.Context, userID string, active bool) *model.AppError UpdateUserActive(c *request.Context, userID string, active bool) *model.AppError
UpdateUserAsUser(user *model.User, asAdmin bool) (*model.User, *model.AppError) UpdateUserAsUser(c request.CTX, user *model.User, asAdmin bool) (*model.User, *model.AppError)
UpdateUserAuth(userID string, userAuth *model.UserAuth) (*model.UserAuth, *model.AppError) UpdateUserAuth(userID string, userAuth *model.UserAuth) (*model.UserAuth, *model.AppError)
UpdateUserRoles(userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) UpdateUserRoles(c request.CTX, userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError)
UpdateUserRolesWithUser(user *model.User, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) UpdateUserRolesWithUser(c request.CTX, user *model.User, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError)
UploadData(c *request.Context, us *model.UploadSession, rd io.Reader) (*model.FileInfo, *model.AppError) UploadData(c *request.Context, us *model.UploadSession, rd io.Reader) (*model.FileInfo, *model.AppError)
UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError
UploadMultipartFiles(c *request.Context, teamID string, channelID string, userID string, fileHeaders []*multipart.FileHeader, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError)
UpsertGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError) UpsertGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError)
UpsertGroupMembers(groupID string, userIDs []string) ([]*model.GroupMember, *model.AppError) UpsertGroupMembers(groupID string, userIDs []string) ([]*model.GroupMember, *model.AppError)
UpsertGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError) UpsertGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError)
UserCanSeeOtherUser(userID string, otherUserId string) (bool, *model.AppError) UserCanSeeOtherUser(userID string, otherUserId string) (bool, *model.AppError)
VerifyEmailFromToken(userSuppliedTokenString string) *model.AppError VerifyEmailFromToken(c request.CTX, userSuppliedTokenString string) *model.AppError
VerifyUserEmail(userID, email string) *model.AppError VerifyUserEmail(userID, email string) *model.AppError
ViewChannel(c request.CTX, view *model.ChannelView, userID string, currentSessionId string, collapsedThreadsSupported bool) (map[string]int64, *model.AppError) ViewChannel(c request.CTX, view *model.ChannelView, userID string, currentSessionId string, collapsedThreadsSupported bool) (map[string]int64, *model.AppError)
WriteFile(fr io.Reader, path string) (int64, *model.AppError) WriteFile(fr io.Reader, path string) (int64, *model.AppError)

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

@@ -59,6 +59,10 @@ func (a *App) SessionHasPermissionToTeam(session model.Session, teamID string, p
// SessionHasPermissionToTeams returns true only if user has access to all teams. // SessionHasPermissionToTeams returns true only if user has access to all teams.
func (a *App) SessionHasPermissionToTeams(c request.CTX, session model.Session, teamIDs []string, permission *model.Permission) bool { func (a *App) SessionHasPermissionToTeams(c request.CTX, session model.Session, teamIDs []string, permission *model.Permission) bool {
if len(teamIDs) == 0 {
return true
}
for _, teamID := range teamIDs { for _, teamID := range teamIDs {
if teamID == "" { if teamID == "" {
return false return false
@@ -126,6 +130,10 @@ func (a *App) SessionHasPermissionToChannel(c request.CTX, session model.Session
// SessionHasPermissionToChannels returns true only if user has access to all channels. // SessionHasPermissionToChannels returns true only if user has access to all channels.
func (a *App) SessionHasPermissionToChannels(c request.CTX, session model.Session, channelIDs []string, permission *model.Permission) bool { func (a *App) SessionHasPermissionToChannels(c request.CTX, session model.Session, channelIDs []string, permission *model.Permission) bool {
if len(channelIDs) == 0 {
return true
}
for _, channelID := range channelIDs { for _, channelID := range channelIDs {
if channelID == "" { if channelID == "" {
return false return false

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

@@ -98,7 +98,7 @@ func (a *App) SetAutoResponderStatus(user *model.User, oldNotifyProps model.Stri
} }
} }
func (a *App) DisableAutoResponder(userID string, asAdmin bool) *model.AppError { func (a *App) DisableAutoResponder(c request.CTX, userID string, asAdmin bool) *model.AppError {
user, err := a.GetUser(userID) user, err := a.GetUser(userID)
if err != nil { if err != nil {
return err return err
@@ -111,7 +111,7 @@ func (a *App) DisableAutoResponder(userID string, asAdmin bool) *model.AppError
patch.NotifyProps = user.NotifyProps patch.NotifyProps = user.NotifyProps
patch.NotifyProps[model.AutoResponderActiveNotifyProp] = "false" patch.NotifyProps[model.AutoResponderActiveNotifyProp] = "false"
_, err := a.PatchUser(userID, patch, asAdmin) _, err := a.PatchUser(c, userID, patch, asAdmin)
if err != nil { if err != nil {
return err return err
} }

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

@@ -27,7 +27,7 @@ func TestSetAutoResponderStatus(t *testing.T) {
patch.NotifyProps["auto_responder_active"] = "true" patch.NotifyProps["auto_responder_active"] = "true"
patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today." patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today."
userUpdated1, _ := th.App.PatchUser(user.Id, patch, true) userUpdated1, _ := th.App.PatchUser(th.Context, user.Id, patch, true)
// autoResponder is enabled, status should be OOO // autoResponder is enabled, status should be OOO
th.App.SetAutoResponderStatus(userUpdated1, user.NotifyProps) th.App.SetAutoResponderStatus(userUpdated1, user.NotifyProps)
@@ -41,7 +41,7 @@ func TestSetAutoResponderStatus(t *testing.T) {
patch2.NotifyProps["auto_responder_active"] = "false" patch2.NotifyProps["auto_responder_active"] = "false"
patch2.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today." patch2.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today."
userUpdated2, _ := th.App.PatchUser(user.Id, patch2, true) userUpdated2, _ := th.App.PatchUser(th.Context, user.Id, patch2, true)
// autoResponder is disabled, status should be ONLINE // autoResponder is disabled, status should be ONLINE
th.App.SetAutoResponderStatus(userUpdated2, userUpdated1.NotifyProps) th.App.SetAutoResponderStatus(userUpdated2, userUpdated1.NotifyProps)
@@ -66,15 +66,15 @@ func TestDisableAutoResponder(t *testing.T) {
patch.NotifyProps["auto_responder_active"] = "true" patch.NotifyProps["auto_responder_active"] = "true"
patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today." patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today."
th.App.PatchUser(user.Id, patch, true) th.App.PatchUser(th.Context, user.Id, patch, true)
th.App.DisableAutoResponder(user.Id, true) th.App.DisableAutoResponder(th.Context, user.Id, true)
userUpdated1, err := th.App.GetUser(user.Id) userUpdated1, err := th.App.GetUser(user.Id)
require.Nil(t, err) require.Nil(t, err)
assert.Equal(t, userUpdated1.NotifyProps["auto_responder_active"], "false") assert.Equal(t, userUpdated1.NotifyProps["auto_responder_active"], "false")
th.App.DisableAutoResponder(user.Id, true) th.App.DisableAutoResponder(th.Context, user.Id, true)
userUpdated2, err := th.App.GetUser(user.Id) userUpdated2, err := th.App.GetUser(user.Id)
require.Nil(t, err) require.Nil(t, err)
@@ -94,7 +94,7 @@ func TestSendAutoResponseIfNecessary(t *testing.T) {
"auto_responder_message": "Hello, I'm unavailable today.", "auto_responder_message": "Hello, I'm unavailable today.",
}, },
} }
receiver, err := th.App.PatchUser(receiver.Id, patch, true) receiver, err := th.App.PatchUser(th.Context, receiver.Id, patch, true)
require.Nil(t, err) require.Nil(t, err)
channel := th.CreateDmChannel(receiver) channel := th.CreateDmChannel(receiver)
@@ -124,7 +124,7 @@ func TestSendAutoResponseIfNecessary(t *testing.T) {
"auto_responder_message": "Hello, I'm unavailable today.", "auto_responder_message": "Hello, I'm unavailable today.",
}, },
} }
receiver, err := th.App.PatchUser(receiver.Id, patch, true) receiver, err := th.App.PatchUser(th.Context, receiver.Id, patch, true)
require.Nil(t, err) require.Nil(t, err)
channel := th.CreateDmChannel(receiver) channel := th.CreateDmChannel(receiver)
@@ -171,7 +171,7 @@ func TestSendAutoResponseIfNecessary(t *testing.T) {
"auto_responder_message": "Hello, I'm unavailable today.", "auto_responder_message": "Hello, I'm unavailable today.",
}, },
} }
receiver, err := th.App.PatchUser(receiver.Id, patch, true) receiver, err := th.App.PatchUser(th.Context, receiver.Id, patch, true)
require.Nil(t, err) require.Nil(t, err)
channel := th.CreateDmChannel(receiver) channel := th.CreateDmChannel(receiver)
@@ -211,7 +211,7 @@ func TestSendAutoResponseIfNecessary(t *testing.T) {
"auto_responder_message": "Hello, I'm unavailable today.", "auto_responder_message": "Hello, I'm unavailable today.",
}, },
} }
receiver, err := th.App.PatchUser(receiver.Id, patch, true) receiver, err := th.App.PatchUser(th.Context, receiver.Id, patch, true)
require.Nil(t, err) require.Nil(t, err)
channel := th.CreateDmChannel(receiver) channel := th.CreateDmChannel(receiver)
@@ -252,7 +252,7 @@ func TestSendAutoResponseSuccess(t *testing.T) {
patch.NotifyProps["auto_responder_active"] = "true" patch.NotifyProps["auto_responder_active"] = "true"
patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today." patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today."
userUpdated1, err := th.App.PatchUser(user.Id, patch, true) userUpdated1, err := th.App.PatchUser(th.Context, user.Id, patch, true)
require.Nil(t, err) require.Nil(t, err)
savedPost, _ := th.App.CreatePost(th.Context, &model.Post{ savedPost, _ := th.App.CreatePost(th.Context, &model.Post{
@@ -292,7 +292,7 @@ func TestSendAutoResponseSuccessOnThread(t *testing.T) {
patch.NotifyProps["auto_responder_active"] = "true" patch.NotifyProps["auto_responder_active"] = "true"
patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today." patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today."
userUpdated1, err := th.App.PatchUser(user.Id, patch, true) userUpdated1, err := th.App.PatchUser(th.Context, user.Id, patch, true)
require.Nil(t, err) require.Nil(t, err)
parentPost, _ := th.App.CreatePost(th.Context, &model.Post{ parentPost, _ := th.App.CreatePost(th.Context, &model.Post{
@@ -341,7 +341,7 @@ func TestSendAutoResponseFailure(t *testing.T) {
patch.NotifyProps["auto_responder_active"] = "false" patch.NotifyProps["auto_responder_active"] = "false"
patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today." patch.NotifyProps["auto_responder_message"] = "Hello, I'm unavailable today."
userUpdated1, err := th.App.PatchUser(user.Id, patch, true) userUpdated1, err := th.App.PatchUser(th.Context, user.Id, patch, true)
require.Nil(t, err) require.Nil(t, err)
savedPost, _ := th.App.CreatePost(th.Context, &model.Post{ savedPost, _ := th.App.CreatePost(th.Context, &model.Post{

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

@@ -606,7 +606,7 @@ func TestNotifySysadminsBotOwnerDisabled(t *testing.T) {
Roles: model.SystemAdminRoleId + " " + model.SystemUserRoleId} Roles: model.SystemAdminRoleId + " " + model.SystemUserRoleId}
_, err := th.App.CreateUser(th.Context, &sysadmin1) _, err := th.App.CreateUser(th.Context, &sysadmin1)
require.Nil(t, err, "failed to create user") require.Nil(t, err, "failed to create user")
th.App.UpdateUserRoles(sysadmin1.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false) th.App.UpdateUserRoles(th.Context, sysadmin1.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
sysadmin2 := model.User{ sysadmin2 := model.User{
Email: "sys2@example.com", Email: "sys2@example.com",
@@ -616,7 +616,7 @@ func TestNotifySysadminsBotOwnerDisabled(t *testing.T) {
Roles: model.SystemAdminRoleId + " " + model.SystemUserRoleId} Roles: model.SystemAdminRoleId + " " + model.SystemUserRoleId}
_, err = th.App.CreateUser(th.Context, &sysadmin2) _, err = th.App.CreateUser(th.Context, &sysadmin2)
require.Nil(t, err, "failed to create user") require.Nil(t, err, "failed to create user")
th.App.UpdateUserRoles(sysadmin2.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false) th.App.UpdateUserRoles(th.Context, sysadmin2.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
// create user to be disabled // create user to be disabled
user1, err := th.App.CreateUser(th.Context, &model.User{ user1, err := th.App.CreateUser(th.Context, &model.User{

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

@@ -1004,18 +1004,18 @@ func TestGetChannelMembersTimezones(t *testing.T) {
user := th.BasicUser user := th.BasicUser
user.Timezone["useAutomaticTimezone"] = "false" user.Timezone["useAutomaticTimezone"] = "false"
user.Timezone["manualTimezone"] = "XOXO/BLABLA" user.Timezone["manualTimezone"] = "XOXO/BLABLA"
th.App.UpdateUser(user, false) th.App.UpdateUser(th.Context, user, false)
user2 := th.BasicUser2 user2 := th.BasicUser2
user2.Timezone["automaticTimezone"] = "NoWhere/Island" user2.Timezone["automaticTimezone"] = "NoWhere/Island"
th.App.UpdateUser(user2, false) th.App.UpdateUser(th.Context, user2, false)
user3 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} user3 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser, _ := th.App.CreateUser(th.Context, &user3) ruser, _ := th.App.CreateUser(th.Context, &user3)
th.App.AddUserToChannel(th.Context, ruser, th.BasicChannel, false) th.App.AddUserToChannel(th.Context, ruser, th.BasicChannel, false)
ruser.Timezone["automaticTimezone"] = "NoWhere/Island" ruser.Timezone["automaticTimezone"] = "NoWhere/Island"
th.App.UpdateUser(ruser, false) th.App.UpdateUser(th.Context, ruser, false)
user4 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} user4 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser, _ = th.App.CreateUser(th.Context, &user4) ruser, _ = th.App.CreateUser(th.Context, &user4)

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

@@ -82,9 +82,9 @@ func (w *configWrapper) SaveConfig(newCfg *model.Config, sendConfigChangeCluster
if w.srv.Metrics != nil { if w.srv.Metrics != nil {
w.srv.Metrics.Register() w.srv.Metrics.Register()
} }
w.srv.platformService.RestartMetrics() // TODO: remove when this moved to the platform service w.srv.SetupMetricsServer()
} else { } else {
w.srv.platformService.ShutdownMetrics() // TODO: remove when this moved to the platform service w.srv.StopMetricsServer()
} }
if w.srv.Cluster != nil { if w.srv.Cluster != nil {

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

@@ -12,7 +12,6 @@ import (
"fmt" "fmt"
"image" "image"
"io" "io"
"mime/multipart"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
@@ -453,76 +452,6 @@ func GeneratePublicLinkHash(fileID, salt string) string {
return base64.RawURLEncoding.EncodeToString(hash.Sum(nil)) return base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
} }
func (a *App) UploadMultipartFiles(c *request.Context, teamID string, channelID string, userID string, fileHeaders []*multipart.FileHeader, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
files := make([]io.ReadCloser, len(fileHeaders))
filenames := make([]string, len(fileHeaders))
for i, fileHeader := range fileHeaders {
file, fileErr := fileHeader.Open()
if fileErr != nil {
return nil, model.NewAppError("UploadFiles", "api.file.upload_file.read_request.app_error",
map[string]any{"Filename": fileHeader.Filename}, fileErr.Error(), http.StatusBadRequest)
}
// Will be closed after UploadFiles returns
defer file.Close()
files[i] = file
filenames[i] = fileHeader.Filename
}
return a.UploadFiles(c, teamID, channelID, userID, files, filenames, clientIds, now)
}
// Uploads some files to the given team and channel as the given user. files and filenames should have
// the same length. clientIds should either not be provided or have the same length as files and filenames.
// The provided files should be closed by the caller so that they are not leaked.
func (a *App) UploadFiles(c *request.Context, teamID string, channelID string, userID string, files []io.ReadCloser, filenames []string, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
if *a.Config().FileSettings.DriverName == "" {
return nil, model.NewAppError("UploadFiles", "api.file.upload_file.storage.app_error", nil, "", http.StatusNotImplemented)
}
if len(filenames) != len(files) || (len(clientIds) > 0 && len(clientIds) != len(files)) {
return nil, model.NewAppError("UploadFiles", "api.file.upload_file.incorrect_number_of_files.app_error", nil, "", http.StatusBadRequest)
}
resStruct := &model.FileUploadResponse{
FileInfos: []*model.FileInfo{},
ClientIds: []string{},
}
previewPathList := []string{}
thumbnailPathList := []string{}
imageDataList := [][]byte{}
for i, file := range files {
buf := bytes.NewBuffer(nil)
io.Copy(buf, file)
data := buf.Bytes()
info, data, err := a.DoUploadFileExpectModification(c, now, teamID, channelID, userID, filenames[i], data)
if err != nil {
return nil, err
}
if info.PreviewPath != "" || info.ThumbnailPath != "" {
previewPathList = append(previewPathList, info.PreviewPath)
thumbnailPathList = append(thumbnailPathList, info.ThumbnailPath)
imageDataList = append(imageDataList, data)
}
resStruct.FileInfos = append(resStruct.FileInfos, info)
if len(clientIds) > 0 {
resStruct.ClientIds = append(resStruct.ClientIds, clientIds[i])
}
}
a.HandleImages(previewPathList, thumbnailPathList, imageDataList)
return resStruct, nil
}
// UploadFile uploads a single file in form of a completely constructed byte array for a channel. // UploadFile uploads a single file in form of a completely constructed byte array for a channel.
func (a *App) UploadFile(c *request.Context, data []byte, channelID string, filename string) (*model.FileInfo, *model.AppError) { func (a *App) UploadFile(c *request.Context, data []byte, channelID string, filename string) (*model.FileInfo, *model.AppError) {
_, err := a.GetChannel(c, channelID) _, err := a.GetChannel(c, channelID)

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

@@ -9,8 +9,6 @@ import (
"image" "image"
"image/gif" "image/gif"
"image/jpeg" "image/jpeg"
"io"
"io/ioutil"
"math/rand" "math/rand"
"testing" "testing"
"time" "time"
@@ -130,21 +128,6 @@ func BenchmarkUploadFile(b *testing.B) {
th.App.RemoveFile(info.Path) th.App.RemoveFile(info.Path)
}, },
}, },
{
title: "image UploadFiles",
f: func(b *testing.B, n int, data []byte, ext string) {
resp, err := th.App.UploadFiles(th.Context, teamID, channelID, userID,
[]io.ReadCloser{ioutil.NopCloser(bytes.NewReader(data))},
[]string{fmt.Sprintf("BenchmarkDoUploadFiles-%d%s", n, ext)},
[]string{},
time.Now())
if err != nil {
b.Fatal(err)
}
th.App.Srv().Store.FileInfo().PermanentDelete(resp.FileInfos[0].Id)
th.App.RemoveFile(resp.FileInfos[0].Path)
},
},
{ {
title: "image UploadFileX Content-Length", title: "image UploadFileX Content-Length",
f: func(b *testing.B, n int, data []byte, ext string) { f: func(b *testing.B, n int, data []byte, ext string) {

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

@@ -222,7 +222,7 @@ func (th *TestHelper) InitBasic() *TestHelper {
// create users once and cache them because password hashing is slow // create users once and cache them because password hashing is slow
initBasicOnce.Do(func() { initBasicOnce.Do(func() {
th.SystemAdminUser = th.CreateUser() th.SystemAdminUser = th.CreateUser()
th.App.UpdateUserRoles(th.SystemAdminUser.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false) th.App.UpdateUserRoles(th.Context, th.SystemAdminUser.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id) th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id)
userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy() userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy()

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

@@ -527,12 +527,12 @@ func (a *App) importUser(c request.CTX, data *UserImportData, dryRun bool) *mode
} else { } else {
var appErr *model.AppError var appErr *model.AppError
if hasUserChanged { if hasUserChanged {
if savedUser, appErr = a.UpdateUser(user, false); appErr != nil { if savedUser, appErr = a.UpdateUser(c, user, false); appErr != nil {
return appErr return appErr
} }
} }
if hasUserRolesChanged { if hasUserRolesChanged {
if savedUser, appErr = a.UpdateUserRoles(user.Id, roles, false); appErr != nil { if savedUser, appErr = a.UpdateUserRoles(c, user.Id, roles, false); appErr != nil {
return appErr return appErr
} }
} }
@@ -590,7 +590,7 @@ func (a *App) importUser(c request.CTX, data *UserImportData, dryRun bool) *mode
if limitErr := checkImageLimits(file, *a.Config().FileSettings.MaxImageResolution); limitErr != nil { if limitErr := checkImageLimits(file, *a.Config().FileSettings.MaxImageResolution); limitErr != nil {
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.check_image_limits.app_error", nil, "", http.StatusBadRequest) return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.check_image_limits.app_error", nil, "", http.StatusBadRequest)
} }
if err := a.SetProfileImageFromFile(savedUser.Id, file); err != nil { if err := a.SetProfileImageFromFile(c, savedUser.Id, file); err != nil {
mlog.Warn("Unable to set the profile image from a file.", mlog.Err(err)) mlog.Warn("Unable to set the profile image from a file.", mlog.Err(err))
} }
} }

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

@@ -222,7 +222,7 @@ func (a *App) DoLogin(c *request.Context, w http.ResponseWriter, r *http.Request
userVal := *user userVal := *user
sessionVal := *session sessionVal := *session
a.Srv().Go(func() { a.Srv().Go(func() {
a.Ldap().UpdateProfilePictureIfNecessary(userVal, sessionVal) a.Ldap().UpdateProfilePictureIfNecessary(c, userVal, sessionVal)
}) })
} }

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

@@ -149,14 +149,14 @@ func TestSendNotifications(t *testing.T) {
} }
th.BasicUser.NotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyAny th.BasicUser.NotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyAny
th.BasicUser, appErr = th.App.UpdateUser(th.BasicUser, false) th.BasicUser, appErr = th.App.UpdateUser(th.Context, th.BasicUser, false)
require.Nil(t, appErr) require.Nil(t, appErr)
t.Run("user wants notifications on all comments", func(t *testing.T) { t.Run("user wants notifications on all comments", func(t *testing.T) {
testUserNotNotified(t, th.BasicUser) testUserNotNotified(t, th.BasicUser)
}) })
th.BasicUser.NotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyRoot th.BasicUser.NotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyRoot
th.BasicUser, appErr = th.App.UpdateUser(th.BasicUser, false) th.BasicUser, appErr = th.App.UpdateUser(th.Context, th.BasicUser, false)
require.Nil(t, appErr) require.Nil(t, appErr)
t.Run("user wants notifications on root comment", func(t *testing.T) { t.Run("user wants notifications on root comment", func(t *testing.T) {
testUserNotNotified(t, th.BasicUser) testUserNotNotified(t, th.BasicUser)
@@ -2723,13 +2723,13 @@ func TestReplyPostNotificationsWithCRT(t *testing.T) {
oldValue := th.BasicUser2.NotifyProps[model.CommentsNotifyProp] oldValue := th.BasicUser2.NotifyProps[model.CommentsNotifyProp]
newNotifyProps := th.BasicUser2.NotifyProps newNotifyProps := th.BasicUser2.NotifyProps
newNotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyAny newNotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyAny
u2, appErr := th.App.PatchUser(th.BasicUser2.Id, &model.UserPatch{NotifyProps: newNotifyProps}, false) u2, appErr := th.App.PatchUser(th.Context, th.BasicUser2.Id, &model.UserPatch{NotifyProps: newNotifyProps}, false)
require.Nil(t, appErr) require.Nil(t, appErr)
require.Equal(t, model.CommentsNotifyAny, u2.NotifyProps[model.CommentsNotifyProp]) require.Equal(t, model.CommentsNotifyAny, u2.NotifyProps[model.CommentsNotifyProp])
defer func() { defer func() {
newNotifyProps := th.BasicUser2.NotifyProps newNotifyProps := th.BasicUser2.NotifyProps
newNotifyProps[model.CommentsNotifyProp] = oldValue newNotifyProps[model.CommentsNotifyProp] = oldValue
_, nAppErr := th.App.PatchUser(th.BasicUser2.Id, &model.UserPatch{NotifyProps: newNotifyProps}, false) _, nAppErr := th.App.PatchUser(th.Context, th.BasicUser2.Id, &model.UserPatch{NotifyProps: newNotifyProps}, false)
require.Nil(t, nAppErr) require.Nil(t, nAppErr)
}() }()

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

@@ -1791,7 +1791,7 @@ func (a *OpenTracingAppLayer) Config() *model.Config {
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) ConvertBotToUser(bot *model.Bot, userPatch *model.UserPatch, sysadmin bool) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) ConvertBotToUser(c request.CTX, bot *model.Bot, userPatch *model.UserPatch, sysadmin bool) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.ConvertBotToUser") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.ConvertBotToUser")
@@ -1803,7 +1803,7 @@ func (a *OpenTracingAppLayer) ConvertBotToUser(bot *model.Bot, userPatch *model.
}() }()
defer span.Finish() defer span.Finish()
resultVar0, resultVar1 := a.app.ConvertBotToUser(bot, userPatch, sysadmin) resultVar0, resultVar1 := a.app.ConvertBotToUser(c, bot, userPatch, sysadmin)
if resultVar1 != nil { if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1)) span.LogFields(spanlog.Error(resultVar1))
@@ -2125,7 +2125,7 @@ func (a *OpenTracingAppLayer) CreateGroupWithUserIds(group *model.GroupWithUserI
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) CreateGuest(c *request.Context, user *model.User) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) CreateGuest(c request.CTX, user *model.User) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateGuest") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateGuest")
@@ -2565,7 +2565,7 @@ func (a *OpenTracingAppLayer) CreateUploadSession(c request.CTX, us *model.Uploa
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) CreateUser(c *request.Context, user *model.User) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) CreateUser(c request.CTX, user *model.User) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUser") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUser")
@@ -2609,7 +2609,7 @@ func (a *OpenTracingAppLayer) CreateUserAccessToken(token *model.UserAccessToken
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) CreateUserAsAdmin(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) CreateUserAsAdmin(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserAsAdmin") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserAsAdmin")
@@ -2631,7 +2631,7 @@ func (a *OpenTracingAppLayer) CreateUserAsAdmin(c *request.Context, user *model.
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) CreateUserFromSignup(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) CreateUserFromSignup(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserFromSignup") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserFromSignup")
@@ -2653,7 +2653,7 @@ func (a *OpenTracingAppLayer) CreateUserFromSignup(c *request.Context, user *mod
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) CreateUserWithInviteId(c *request.Context, user *model.User, inviteId string, redirect string) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) CreateUserWithInviteId(c request.CTX, user *model.User, inviteId string, redirect string) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserWithInviteId") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserWithInviteId")
@@ -2675,7 +2675,7 @@ func (a *OpenTracingAppLayer) CreateUserWithInviteId(c *request.Context, user *m
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) CreateUserWithToken(c *request.Context, user *model.User, token *model.Token) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) CreateUserWithToken(c request.CTX, user *model.User, token *model.Token) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserWithToken") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserWithToken")
@@ -3521,7 +3521,7 @@ func (a *OpenTracingAppLayer) DemoteUserToGuest(c request.CTX, user *model.User)
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) DisableAutoResponder(userID string, asAdmin bool) *model.AppError { func (a *OpenTracingAppLayer) DisableAutoResponder(c request.CTX, userID string, asAdmin bool) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.DisableAutoResponder") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.DisableAutoResponder")
@@ -3533,7 +3533,7 @@ func (a *OpenTracingAppLayer) DisableAutoResponder(userID string, asAdmin bool)
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.DisableAutoResponder(userID, asAdmin) resultVar0 := a.app.DisableAutoResponder(c, userID, asAdmin)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -11709,7 +11709,7 @@ func (a *OpenTracingAppLayer) JoinDefaultChannels(c request.CTX, teamID string,
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) JoinUserToTeam(c *request.Context, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) { func (a *OpenTracingAppLayer) JoinUserToTeam(c request.CTX, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.JoinUserToTeam") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.JoinUserToTeam")
@@ -12657,7 +12657,7 @@ func (a *OpenTracingAppLayer) PatchTeam(teamID string, patch *model.TeamPatch) (
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) PatchUser(c request.CTX, userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.PatchUser") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.PatchUser")
@@ -12669,7 +12669,7 @@ func (a *OpenTracingAppLayer) PatchUser(userID string, patch *model.UserPatch, a
}() }()
defer span.Finish() defer span.Finish()
resultVar0, resultVar1 := a.app.PatchUser(userID, patch, asAdmin) resultVar0, resultVar1 := a.app.PatchUser(c, userID, patch, asAdmin)
if resultVar1 != nil { if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1)) span.LogFields(spanlog.Error(resultVar1))
@@ -13444,7 +13444,7 @@ func (a *OpenTracingAppLayer) RemoveConfigListener(id string) {
a.app.RemoveConfigListener(id) a.app.RemoveConfigListener(id)
} }
func (a *OpenTracingAppLayer) RemoveCustomStatus(userID string) *model.AppError { func (a *OpenTracingAppLayer) RemoveCustomStatus(c request.CTX, userID string) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.RemoveCustomStatus") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.RemoveCustomStatus")
@@ -13456,7 +13456,7 @@ func (a *OpenTracingAppLayer) RemoveCustomStatus(userID string) *model.AppError
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.RemoveCustomStatus(userID) resultVar0 := a.app.RemoveCustomStatus(c, userID)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -13818,7 +13818,7 @@ func (a *OpenTracingAppLayer) RequestLicenseAndAckWarnMetric(c *request.Context,
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) ResetPasswordFromToken(userSuppliedTokenString string, newPassword string) *model.AppError { func (a *OpenTracingAppLayer) ResetPasswordFromToken(c request.CTX, userSuppliedTokenString string, newPassword string) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.ResetPasswordFromToken") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.ResetPasswordFromToken")
@@ -13830,7 +13830,7 @@ func (a *OpenTracingAppLayer) ResetPasswordFromToken(userSuppliedTokenString str
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.ResetPasswordFromToken(userSuppliedTokenString, newPassword) resultVar0 := a.app.ResetPasswordFromToken(c, userSuppliedTokenString, newPassword)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -15497,7 +15497,7 @@ func (a *OpenTracingAppLayer) SetChannels(ch *app.Channels) {
a.app.SetChannels(ch) a.app.SetChannels(ch)
} }
func (a *OpenTracingAppLayer) SetCustomStatus(userID string, cs *model.CustomStatus) *model.AppError { func (a *OpenTracingAppLayer) SetCustomStatus(c request.CTX, userID string, cs *model.CustomStatus) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetCustomStatus") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetCustomStatus")
@@ -15509,7 +15509,7 @@ func (a *OpenTracingAppLayer) SetCustomStatus(userID string, cs *model.CustomSta
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.SetCustomStatus(userID, cs) resultVar0 := a.app.SetCustomStatus(c, userID, cs)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -15519,7 +15519,7 @@ func (a *OpenTracingAppLayer) SetCustomStatus(userID string, cs *model.CustomSta
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) SetDefaultProfileImage(user *model.User) *model.AppError { func (a *OpenTracingAppLayer) SetDefaultProfileImage(c request.CTX, user *model.User) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetDefaultProfileImage") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetDefaultProfileImage")
@@ -15531,7 +15531,7 @@ func (a *OpenTracingAppLayer) SetDefaultProfileImage(user *model.User) *model.Ap
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.SetDefaultProfileImage(user) resultVar0 := a.app.SetDefaultProfileImage(c, user)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -15651,7 +15651,7 @@ func (a *OpenTracingAppLayer) SetPostReminder(postID string, userID string, targ
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) SetProfileImage(userID string, imageData *multipart.FileHeader) *model.AppError { func (a *OpenTracingAppLayer) SetProfileImage(c request.CTX, userID string, imageData *multipart.FileHeader) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetProfileImage") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetProfileImage")
@@ -15663,7 +15663,7 @@ func (a *OpenTracingAppLayer) SetProfileImage(userID string, imageData *multipar
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.SetProfileImage(userID, imageData) resultVar0 := a.app.SetProfileImage(c, userID, imageData)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -15673,7 +15673,7 @@ func (a *OpenTracingAppLayer) SetProfileImage(userID string, imageData *multipar
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) SetProfileImageFromFile(userID string, file io.Reader) *model.AppError { func (a *OpenTracingAppLayer) SetProfileImageFromFile(c request.CTX, userID string, file io.Reader) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetProfileImageFromFile") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetProfileImageFromFile")
@@ -15685,7 +15685,7 @@ func (a *OpenTracingAppLayer) SetProfileImageFromFile(userID string, file io.Rea
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.SetProfileImageFromFile(userID, file) resultVar0 := a.app.SetProfileImageFromFile(c, userID, file)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -15695,7 +15695,7 @@ func (a *OpenTracingAppLayer) SetProfileImageFromFile(userID string, file io.Rea
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) SetProfileImageFromMultiPartFile(userID string, file multipart.File) *model.AppError { func (a *OpenTracingAppLayer) SetProfileImageFromMultiPartFile(c request.CTX, userID string, file multipart.File) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetProfileImageFromMultiPartFile") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetProfileImageFromMultiPartFile")
@@ -15707,7 +15707,7 @@ func (a *OpenTracingAppLayer) SetProfileImageFromMultiPartFile(userID string, fi
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.SetProfileImageFromMultiPartFile(userID, file) resultVar0 := a.app.SetProfileImageFromMultiPartFile(c, userID, file)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -16910,7 +16910,7 @@ func (a *OpenTracingAppLayer) UpdateLastActivityAtIfNeeded(session model.Session
a.app.UpdateLastActivityAtIfNeeded(session) a.app.UpdateLastActivityAtIfNeeded(session)
} }
func (a *OpenTracingAppLayer) UpdateMfa(activate bool, userID string, token string) *model.AppError { func (a *OpenTracingAppLayer) UpdateMfa(c request.CTX, activate bool, userID string, token string) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateMfa") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateMfa")
@@ -16922,7 +16922,7 @@ func (a *OpenTracingAppLayer) UpdateMfa(activate bool, userID string, token stri
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.UpdateMfa(activate, userID, token) resultVar0 := a.app.UpdateMfa(c, activate, userID, token)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -17035,7 +17035,7 @@ func (a *OpenTracingAppLayer) UpdatePassword(user *model.User, newPassword strin
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) UpdatePasswordAsUser(userID string, currentPassword string, newPassword string) *model.AppError { func (a *OpenTracingAppLayer) UpdatePasswordAsUser(c request.CTX, userID string, currentPassword string, newPassword string) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdatePasswordAsUser") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdatePasswordAsUser")
@@ -17047,7 +17047,7 @@ func (a *OpenTracingAppLayer) UpdatePasswordAsUser(userID string, currentPasswor
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.UpdatePasswordAsUser(userID, currentPassword, newPassword) resultVar0 := a.app.UpdatePasswordAsUser(c, userID, currentPassword, newPassword)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -17057,7 +17057,7 @@ func (a *OpenTracingAppLayer) UpdatePasswordAsUser(userID string, currentPasswor
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) UpdatePasswordByUserIdSendEmail(userID string, newPassword string, method string) *model.AppError { func (a *OpenTracingAppLayer) UpdatePasswordByUserIdSendEmail(c request.CTX, userID string, newPassword string, method string) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdatePasswordByUserIdSendEmail") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdatePasswordByUserIdSendEmail")
@@ -17069,7 +17069,7 @@ func (a *OpenTracingAppLayer) UpdatePasswordByUserIdSendEmail(userID string, new
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.UpdatePasswordByUserIdSendEmail(userID, newPassword, method) resultVar0 := a.app.UpdatePasswordByUserIdSendEmail(c, userID, newPassword, method)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -17079,7 +17079,7 @@ func (a *OpenTracingAppLayer) UpdatePasswordByUserIdSendEmail(userID string, new
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) UpdatePasswordSendEmail(user *model.User, newPassword string, method string) *model.AppError { func (a *OpenTracingAppLayer) UpdatePasswordSendEmail(c request.CTX, user *model.User, newPassword string, method string) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdatePasswordSendEmail") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdatePasswordSendEmail")
@@ -17091,7 +17091,7 @@ func (a *OpenTracingAppLayer) UpdatePasswordSendEmail(user *model.User, newPassw
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.UpdatePasswordSendEmail(user, newPassword, method) resultVar0 := a.app.UpdatePasswordSendEmail(c, user, newPassword, method)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))
@@ -17563,7 +17563,7 @@ func (a *OpenTracingAppLayer) UpdateThreadsReadForUser(userID string, teamID str
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) UpdateUser(c request.CTX, user *model.User, sendNotifications bool) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUser") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUser")
@@ -17575,7 +17575,7 @@ func (a *OpenTracingAppLayer) UpdateUser(user *model.User, sendNotifications boo
}() }()
defer span.Finish() defer span.Finish()
resultVar0, resultVar1 := a.app.UpdateUser(user, sendNotifications) resultVar0, resultVar1 := a.app.UpdateUser(c, user, sendNotifications)
if resultVar1 != nil { if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1)) span.LogFields(spanlog.Error(resultVar1))
@@ -17607,7 +17607,7 @@ func (a *OpenTracingAppLayer) UpdateUserActive(c *request.Context, userID string
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) UpdateUserAsUser(user *model.User, asAdmin bool) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) UpdateUserAsUser(c request.CTX, user *model.User, asAdmin bool) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUserAsUser") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUserAsUser")
@@ -17619,7 +17619,7 @@ func (a *OpenTracingAppLayer) UpdateUserAsUser(user *model.User, asAdmin bool) (
}() }()
defer span.Finish() defer span.Finish()
resultVar0, resultVar1 := a.app.UpdateUserAsUser(user, asAdmin) resultVar0, resultVar1 := a.app.UpdateUserAsUser(c, user, asAdmin)
if resultVar1 != nil { if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1)) span.LogFields(spanlog.Error(resultVar1))
@@ -17651,7 +17651,7 @@ func (a *OpenTracingAppLayer) UpdateUserAuth(userID string, userAuth *model.User
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) UpdateUserRoles(userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) UpdateUserRoles(c request.CTX, userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUserRoles") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUserRoles")
@@ -17663,7 +17663,7 @@ func (a *OpenTracingAppLayer) UpdateUserRoles(userID string, newRoles string, se
}() }()
defer span.Finish() defer span.Finish()
resultVar0, resultVar1 := a.app.UpdateUserRoles(userID, newRoles, sendWebSocketEvent) resultVar0, resultVar1 := a.app.UpdateUserRoles(c, userID, newRoles, sendWebSocketEvent)
if resultVar1 != nil { if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1)) span.LogFields(spanlog.Error(resultVar1))
@@ -17673,7 +17673,7 @@ func (a *OpenTracingAppLayer) UpdateUserRoles(userID string, newRoles string, se
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) UpdateUserRolesWithUser(user *model.User, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) { func (a *OpenTracingAppLayer) UpdateUserRolesWithUser(c request.CTX, user *model.User, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUserRolesWithUser") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdateUserRolesWithUser")
@@ -17685,7 +17685,7 @@ func (a *OpenTracingAppLayer) UpdateUserRolesWithUser(user *model.User, newRoles
}() }()
defer span.Finish() defer span.Finish()
resultVar0, resultVar1 := a.app.UpdateUserRolesWithUser(user, newRoles, sendWebSocketEvent) resultVar0, resultVar1 := a.app.UpdateUserRolesWithUser(c, user, newRoles, sendWebSocketEvent)
if resultVar1 != nil { if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1)) span.LogFields(spanlog.Error(resultVar1))
@@ -17835,50 +17835,6 @@ func (a *OpenTracingAppLayer) UploadFileX(c *request.Context, channelID string,
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) UploadFiles(c *request.Context, teamID string, channelID string, userID string, files []io.ReadCloser, filenames []string, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UploadFiles")
a.ctx = newCtx
a.app.Srv().Store.SetContext(newCtx)
defer func() {
a.app.Srv().Store.SetContext(origCtx)
a.ctx = origCtx
}()
defer span.Finish()
resultVar0, resultVar1 := a.app.UploadFiles(c, teamID, channelID, userID, files, filenames, clientIds, now)
if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1))
ext.Error.Set(span, true)
}
return resultVar0, resultVar1
}
func (a *OpenTracingAppLayer) UploadMultipartFiles(c *request.Context, teamID string, channelID string, userID string, fileHeaders []*multipart.FileHeader, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UploadMultipartFiles")
a.ctx = newCtx
a.app.Srv().Store.SetContext(newCtx)
defer func() {
a.app.Srv().Store.SetContext(origCtx)
a.ctx = origCtx
}()
defer span.Finish()
resultVar0, resultVar1 := a.app.UploadMultipartFiles(c, teamID, channelID, userID, fileHeaders, clientIds, now)
if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1))
ext.Error.Set(span, true)
}
return resultVar0, resultVar1
}
func (a *OpenTracingAppLayer) UpsertGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError) { func (a *OpenTracingAppLayer) UpsertGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpsertGroupMember") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpsertGroupMember")
@@ -17989,7 +17945,7 @@ func (a *OpenTracingAppLayer) UserIsInAdminRoleGroup(userID string, syncableID s
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (a *OpenTracingAppLayer) VerifyEmailFromToken(userSuppliedTokenString string) *model.AppError { func (a *OpenTracingAppLayer) VerifyEmailFromToken(c request.CTX, userSuppliedTokenString string) *model.AppError {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.VerifyEmailFromToken") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.VerifyEmailFromToken")
@@ -18001,7 +17957,7 @@ func (a *OpenTracingAppLayer) VerifyEmailFromToken(userSuppliedTokenString strin
}() }()
defer span.Finish() defer span.Finish()
resultVar0 := a.app.VerifyEmailFromToken(userSuppliedTokenString) resultVar0 := a.app.VerifyEmailFromToken(c, userSuppliedTokenString)
if resultVar0 != nil { if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0)) span.LogFields(spanlog.Error(resultVar0))

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

@@ -3,28 +3,14 @@
package platform package platform
import (
"errors"
"github.com/mattermost/mattermost-server/v6/config"
"github.com/mattermost/mattermost-server/v6/einterfaces"
)
// ServiceConfig is used to initialize the PlatformService. // ServiceConfig is used to initialize the PlatformService.
// The mandatory fields will be checked during the initialization of the service. // The mandatory fields will be checked during the initialization of the service.
type ServiceConfig struct { type ServiceConfig struct {
// Mandatory fields // Mandatory fields
ConfigStore *config.Store
StartMetrics bool // TODO: find an elegant way to start/stop metrics server by default
// Optional fields // Optional fields
Metrics einterfaces.MetricsInterface
Cluster einterfaces.ClusterInterface
} }
func (c *ServiceConfig) validate() error { func (c *ServiceConfig) validate() error {
// Mandatory fields need to be checked here // Mandatory fields need to be checked here
if c.ConfigStore == nil {
return errors.New("ConfigStore is required")
}
return nil return nil
} }

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

@@ -1,162 +0,0 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package platform
import (
"context"
"net"
"net/http"
"net/http/pprof"
"runtime"
"sync"
"text/template"
"time"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"github.com/mattermost/mattermost-server/v6/einterfaces"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
"github.com/pkg/errors"
)
const TimeToWaitForConnectionsToCloseOnServerShutdown = time.Second
type platformMetrics struct {
server *http.Server
router *mux.Router
lock sync.Mutex
metricsImpl einterfaces.MetricsInterface
cfgFn func() *model.Config
}
func newPlatformMetrics(metricsImpl einterfaces.MetricsInterface, cfgFn func() *model.Config) *platformMetrics {
if !*cfgFn().MetricsSettings.Enable {
return nil
}
pm := &platformMetrics{
cfgFn: cfgFn,
}
pm.stopMetricsServer()
if err := pm.initMetricsRouter(); err != nil {
mlog.Error("Error initiating metrics router.", mlog.Err(err))
}
if metricsImpl != nil {
metricsImpl.Register()
}
pm.startMetricsServer()
return pm
}
func (pm *platformMetrics) stopMetricsServer() {
pm.lock.Lock()
defer pm.lock.Unlock()
if pm.server != nil {
ctx, cancel := context.WithTimeout(context.Background(), TimeToWaitForConnectionsToCloseOnServerShutdown)
defer cancel()
pm.server.Shutdown(ctx)
mlog.Info("Metrics and profiling server is stopping")
}
}
func (pm *platformMetrics) startMetricsServer() {
var notify chan struct{}
pm.lock.Lock()
defer func() {
if notify != nil {
<-notify
}
pm.lock.Unlock()
}()
l, err := net.Listen("tcp", *pm.cfgFn().MetricsSettings.ListenAddress)
if err != nil {
mlog.Error(err.Error())
return
}
notify = make(chan struct{})
pm.server = &http.Server{
Handler: handlers.RecoveryHandler(handlers.PrintRecoveryStack(true))(pm.router),
ReadTimeout: time.Duration(*pm.cfgFn().ServiceSettings.ReadTimeout) * time.Second,
WriteTimeout: time.Duration(*pm.cfgFn().ServiceSettings.WriteTimeout) * time.Second,
}
go func() {
close(notify)
if err := pm.server.Serve(l); err != nil && err != http.ErrServerClosed {
mlog.Critical(err.Error())
}
}()
mlog.Info("Metrics and profiling server is started", mlog.String("address", l.Addr().String()))
}
func (pm *platformMetrics) initMetricsRouter() error {
pm.router = mux.NewRouter()
runtime.SetBlockProfileRate(*pm.cfgFn().MetricsSettings.BlockProfileRate)
metricsPage := `
<html>
<body>{{if .}}
<div><a href="/metrics">Metrics</a></div>{{end}}
<div><a href="/debug/pprof/">Profiling Root</a></div>
<div><a href="/debug/pprof/cmdline">Profiling Command Line</a></div>
<div><a href="/debug/pprof/symbol">Profiling Symbols</a></div>
<div><a href="/debug/pprof/goroutine">Profiling Goroutines</a></div>
<div><a href="/debug/pprof/heap">Profiling Heap</a></div>
<div><a href="/debug/pprof/threadcreate">Profiling Threads</a></div>
<div><a href="/debug/pprof/block">Profiling Blocking</a></div>
<div><a href="/debug/pprof/trace">Profiling Execution Trace</a></div>
<div><a href="/debug/pprof/profile">Profiling CPU</a></div>
</body>
</html>
`
metricsPageTmpl, err := template.New("page").Parse(metricsPage)
if err != nil {
return errors.Wrap(err, "failed to create template")
}
rootHandler := func(w http.ResponseWriter, r *http.Request) {
metricsPageTmpl.Execute(w, pm.metricsImpl != nil)
}
pm.router.HandleFunc("/", rootHandler)
pm.router.StrictSlash(true)
pm.router.Handle("/debug", http.RedirectHandler("/", http.StatusMovedPermanently))
pm.router.HandleFunc("/debug/pprof/", pprof.Index)
pm.router.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
pm.router.HandleFunc("/debug/pprof/profile", pprof.Profile)
pm.router.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
pm.router.HandleFunc("/debug/pprof/trace", pprof.Trace)
// Manually add support for paths linked to by index page at /debug/pprof/
pm.router.Handle("/debug/pprof/goroutine", pprof.Handler("goroutine"))
pm.router.Handle("/debug/pprof/heap", pprof.Handler("heap"))
pm.router.Handle("/debug/pprof/threadcreate", pprof.Handler("threadcreate"))
pm.router.Handle("/debug/pprof/block", pprof.Handler("block"))
return nil
}
func (ps *PlatformService) HandleMetrics(route string, h http.Handler) {
if ps.metrics.router != nil {
ps.metrics.router.Handle(route, h)
}
}
func (ps *PlatformService) RestartMetrics() {
ps.metrics = newPlatformMetrics(ps.serviceConfig.Metrics, ps.serviceConfig.ConfigStore.Get)
}

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

@@ -3,42 +3,17 @@
package platform package platform
import (
"github.com/mattermost/mattermost-server/v6/config"
"github.com/mattermost/mattermost-server/v6/einterfaces"
)
// PlatformService is the service for the platform related tasks. It is // PlatformService is the service for the platform related tasks. It is
// responsible for non-entity related functionalities that are required // responsible for non-entity related functionalities that are required
// by a product such as database access, configuration access, licensing etc. // by a product such as database access, configuration access, licensing etc.
type PlatformService struct { type PlatformService struct {
serviceConfig ServiceConfig
configStore *config.Store
metrics *platformMetrics
cluster einterfaces.ClusterInterface
} }
// New creates a new PlatformService. // New creates a new PlatformService.
func New(sc ServiceConfig) (*PlatformService, error) { func New(c ServiceConfig) (*PlatformService, error) {
if err := sc.validate(); err != nil { if err := c.validate(); err != nil {
return nil, err return nil, err
} }
ps := &PlatformService{ return &PlatformService{}, nil
serviceConfig: sc,
configStore: sc.ConfigStore,
cluster: sc.Cluster,
}
ps.metrics = newPlatformMetrics(sc.Metrics, ps.configStore.Get)
return ps, nil
}
func (ps *PlatformService) ShutdownMetrics() {
if ps.metrics != nil {
ps.metrics.stopMetricsServer()
}
} }

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

@@ -318,7 +318,7 @@ func (api *PluginAPI) RevokeUserAccessToken(tokenID string) *model.AppError {
} }
func (api *PluginAPI) UpdateUser(user *model.User) (*model.User, *model.AppError) { func (api *PluginAPI) UpdateUser(user *model.User) (*model.User, *model.AppError) {
return api.app.UpdateUser(user, true) return api.app.UpdateUser(api.ctx, user, true)
} }
func (api *PluginAPI) UpdateUserActive(userID string, active bool) *model.AppError { func (api *PluginAPI) UpdateUserActive(userID string, active bool) *model.AppError {
@@ -359,11 +359,11 @@ func (api *PluginAPI) SetUserStatusTimedDND(userID string, endTime int64) (*mode
} }
func (api *PluginAPI) UpdateUserCustomStatus(userID string, customStatus *model.CustomStatus) *model.AppError { func (api *PluginAPI) UpdateUserCustomStatus(userID string, customStatus *model.CustomStatus) *model.AppError {
return api.app.SetCustomStatus(userID, customStatus) return api.app.SetCustomStatus(api.ctx, userID, customStatus)
} }
func (api *PluginAPI) RemoveUserCustomStatus(userID string) *model.AppError { func (api *PluginAPI) RemoveUserCustomStatus(userID string) *model.AppError {
return api.app.RemoveCustomStatus(userID) return api.app.RemoveCustomStatus(api.ctx, userID)
} }
func (api *PluginAPI) GetUserCustomStatus(userID string) (*model.CustomStatus, *model.AppError) { func (api *PluginAPI) GetUserCustomStatus(userID string) (*model.CustomStatus, *model.AppError) {
@@ -738,7 +738,7 @@ func (api *PluginAPI) SetProfileImage(userID string, data []byte) *model.AppErro
return err return err
} }
return api.app.SetProfileImageFromFile(userID, bytes.NewReader(data)) return api.app.SetProfileImageFromFile(api.ctx, userID, bytes.NewReader(data))
} }
func (api *PluginAPI) GetEmojiList(sortBy string, page, perPage int) ([]*model.Emoji, *model.AppError) { func (api *PluginAPI) GetEmojiList(sortBy string, page, perPage int) ([]*model.Emoji, *model.AppError) {

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

@@ -547,7 +547,7 @@ func TestPluginAPIUserCustomStatus(t *testing.T) {
custom.Text = "" custom.Text = ""
err = api.UpdateUserCustomStatus(user1.Id, custom) err = api.UpdateUserCustomStatus(user1.Id, custom)
assert.NotNil(t, err) assert.NotNil(t, err)
assert.Equal(t, err.Error(), "SetCustomStatus: Failed to update the custom status. Please add either emoji or custom text status or both., ") assert.Equal(t, err.Error(), "SetCustomStatus: Failed to update the custom status. Please add either emoji or custom text status or both.")
// Remove custom status // Remove custom status
err = api.RemoveUserCustomStatus(user1.Id) err = api.RemoveUserCustomStatus(user1.Id)
@@ -889,7 +889,7 @@ func TestPluginAPIInstallPlugin(t *testing.T) {
_, appErr := api.InstallPlugin(bytes.NewReader(tarData), true) _, appErr := api.InstallPlugin(bytes.NewReader(tarData), true)
assert.NotNil(t, appErr, "should not allow upload if upload disabled") assert.NotNil(t, appErr, "should not allow upload if upload disabled")
assert.Equal(t, appErr.Error(), "installPlugin: Plugins and/or plugin uploads have been disabled., ") assert.Equal(t, appErr.Error(), "installPlugin: Plugins and/or plugin uploads have been disabled.")
th.App.UpdateConfig(func(cfg *model.Config) { th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.PluginSettings.Enable = true *cfg.PluginSettings.Enable = true

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

@@ -462,15 +462,12 @@ func TestHookFileWillBeUploaded(t *testing.T) {
}, th.App, func(*model.Manifest) plugin.API { return &mockAPI }) }, th.App, func(*model.Manifest) plugin.API { return &mockAPI })
defer tearDown() defer tearDown()
_, err := th.App.UploadFiles(th.Context, _, err := th.App.UploadFile(th.Context,
"noteam", []byte("inputfile"),
th.BasicChannel.Id, th.BasicChannel.Id,
th.BasicUser.Id, "testhook.txt",
[]io.ReadCloser{ioutil.NopCloser(bytes.NewBufferString("inputfile"))},
[]string{"testhook.txt"},
[]string{},
time.Now(),
) )
if assert.NotNil(t, err) { if assert.NotNil(t, err) {
assert.Equal(t, "File rejected by plugin. rejected", err.Message) assert.Equal(t, "File rejected by plugin. rejected", err.Message)
} }
@@ -515,15 +512,12 @@ func TestHookFileWillBeUploaded(t *testing.T) {
}, th.App, func(*model.Manifest) plugin.API { return &mockAPI }) }, th.App, func(*model.Manifest) plugin.API { return &mockAPI })
defer tearDown() defer tearDown()
_, err := th.App.UploadFiles(th.Context, _, err := th.App.UploadFile(th.Context,
"noteam", []byte("inputfile"),
th.BasicChannel.Id, th.BasicChannel.Id,
th.BasicUser.Id, "testhook.txt",
[]io.ReadCloser{ioutil.NopCloser(bytes.NewBufferString("inputfile"))},
[]string{"testhook.txt"},
[]string{},
time.Now(),
) )
if assert.NotNil(t, err) { if assert.NotNil(t, err) {
assert.Equal(t, "File rejected by plugin. rejected", err.Message) assert.Equal(t, "File rejected by plugin. rejected", err.Message)
} }
@@ -562,20 +556,16 @@ func TestHookFileWillBeUploaded(t *testing.T) {
}, th.App, func(*model.Manifest) plugin.API { return &mockAPI }) }, th.App, func(*model.Manifest) plugin.API { return &mockAPI })
defer tearDown() defer tearDown()
response, err := th.App.UploadFiles(th.Context, response, err := th.App.UploadFile(th.Context,
"noteam", []byte("inputfile"),
th.BasicChannel.Id, th.BasicChannel.Id,
th.BasicUser.Id, "testhook.txt",
[]io.ReadCloser{ioutil.NopCloser(bytes.NewBufferString("inputfile"))},
[]string{"testhook.txt"},
[]string{},
time.Now(),
) )
assert.Nil(t, err) assert.Nil(t, err)
assert.NotNil(t, response) assert.NotNil(t, response)
assert.Equal(t, 1, len(response.FileInfos))
fileID := response.FileInfos[0].Id fileID := response.Id
fileInfo, err := th.App.GetFileInfo(fileID) fileInfo, err := th.App.GetFileInfo(fileID)
assert.Nil(t, err) assert.Nil(t, err)
assert.NotNil(t, fileInfo) assert.NotNil(t, fileInfo)
@@ -638,19 +628,14 @@ func TestHookFileWillBeUploaded(t *testing.T) {
}, th.App, func(*model.Manifest) plugin.API { return &mockAPI }) }, th.App, func(*model.Manifest) plugin.API { return &mockAPI })
defer tearDown() defer tearDown()
response, err := th.App.UploadFiles(th.Context, response, err := th.App.UploadFile(th.Context,
"noteam", []byte("inputfile"),
th.BasicChannel.Id, th.BasicChannel.Id,
th.BasicUser.Id, "testhook.txt",
[]io.ReadCloser{ioutil.NopCloser(bytes.NewBufferString("inputfile"))},
[]string{"testhook.txt"},
[]string{},
time.Now(),
) )
assert.Nil(t, err) assert.Nil(t, err)
assert.NotNil(t, response) assert.NotNil(t, response)
assert.Equal(t, 1, len(response.FileInfos)) fileID := response.Id
fileID := response.FileInfos[0].Id
fileInfo, err := th.App.GetFileInfo(fileID) fileInfo, err := th.App.GetFileInfo(fileID)
assert.Nil(t, err) assert.Nil(t, err)

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

@@ -453,7 +453,7 @@ func TestGetPluginStatusesDisabled(t *testing.T) {
_, err := th.App.GetPluginStatuses() _, err := th.App.GetPluginStatuses()
require.NotNil(t, err) require.NotNil(t, err)
require.EqualError(t, err, "GetPluginStatuses: Plugins have been disabled. Please check your logs for details., ") require.EqualError(t, err, "GetPluginStatuses: Plugins have been disabled. Please check your logs for details.")
} }
func TestGetPluginStatuses(t *testing.T) { func TestGetPluginStatuses(t *testing.T) {

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

@@ -9,8 +9,10 @@ import (
"crypto/tls" "crypto/tls"
"fmt" "fmt"
"hash/maphash" "hash/maphash"
"html/template"
"net" "net"
"net/http" "net/http"
"net/http/pprof"
"net/url" "net/url"
"os" "os"
"os/exec" "os/exec"
@@ -25,6 +27,7 @@ import (
"github.com/getsentry/sentry-go" "github.com/getsentry/sentry-go"
sentryhttp "github.com/getsentry/sentry-go/http" sentryhttp "github.com/getsentry/sentry-go/http"
"github.com/gorilla/handlers"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/rs/cors" "github.com/rs/cors"
@@ -32,7 +35,6 @@ import (
"github.com/mattermost/mattermost-server/v6/app/email" "github.com/mattermost/mattermost-server/v6/app/email"
"github.com/mattermost/mattermost-server/v6/app/featureflag" "github.com/mattermost/mattermost-server/v6/app/featureflag"
"github.com/mattermost/mattermost-server/v6/app/platform"
"github.com/mattermost/mattermost-server/v6/app/request" "github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/app/teams" "github.com/mattermost/mattermost-server/v6/app/teams"
"github.com/mattermost/mattermost-server/v6/app/users" "github.com/mattermost/mattermost-server/v6/app/users"
@@ -129,6 +131,10 @@ type Server struct {
localModeServer *http.Server localModeServer *http.Server
metricsServer *http.Server
metricsRouter *mux.Router
metricsLock sync.Mutex
didFinishListen chan struct{} didFinishListen chan struct{}
goroutineCount int32 goroutineCount int32
@@ -171,7 +177,6 @@ type Server struct {
configStore *configWrapper configStore *configWrapper
filestore filestore.FileBackend filestore filestore.FileBackend
platformService *platform.PlatformService
telemetryService *telemetry.TelemetryService telemetryService *telemetry.TelemetryService
userService *users.UserService userService *users.UserService
teamService *teams.TeamService teamService *teams.TeamService
@@ -251,17 +256,6 @@ func NewServer(options ...Option) (*Server, error) {
s.configStore = &configWrapper{srv: s, Store: configStore} s.configStore = &configWrapper{srv: s, Store: configStore}
} }
ps, sErr := platform.New(platform.ServiceConfig{
ConfigStore: s.configStore.Store,
StartMetrics: s.startMetrics,
Metrics: s.Metrics,
Cluster: s.Cluster,
})
if sErr != nil {
return nil, errors.Wrap(sErr, "failed to initialize platform")
}
s.platformService = ps
// Step 2: Logging // Step 2: Logging
if err := s.initLogging(); err != nil { if err := s.initLogging(); err != nil {
mlog.Error("Could not initiate logging", mlog.Err(err)) mlog.Error("Could not initiate logging", mlog.Err(err))
@@ -625,6 +619,10 @@ func NewServer(options ...Option) (*Server, error) {
s.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableDeveloper = true }) s.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableDeveloper = true })
} }
if s.startMetrics {
s.SetupMetricsServer()
}
s.AddLicenseListener(func(oldLicense, newLicense *model.License) { s.AddLicenseListener(func(oldLicense, newLicense *model.License) {
if (oldLicense == nil && newLicense == nil) || !s.startMetrics { if (oldLicense == nil && newLicense == nil) || !s.startMetrics {
return return
@@ -634,7 +632,7 @@ func NewServer(options ...Option) (*Server, error) {
return return
} }
s.platformService.RestartMetrics() // TODO: remove when this moved to the platform service s.SetupMetricsServer()
}) })
s.SearchEngine.UpdateConfig(s.Config()) s.SearchEngine.UpdateConfig(s.Config())
@@ -703,6 +701,24 @@ func NewServer(options ...Option) (*Server, error) {
return s, nil return s, nil
} }
func (s *Server) SetupMetricsServer() {
if !*s.Config().MetricsSettings.Enable {
return
}
s.StopMetricsServer()
if err := s.InitMetricsRouter(); err != nil {
mlog.Error("Error initiating metrics router.", mlog.Err(err))
}
if s.Metrics != nil {
s.Metrics.Register()
}
s.startMetricsServer()
}
func maxInt(a, b int) int { func maxInt(a, b int) int {
if a > b { if a > b {
return a return a
@@ -1030,7 +1046,7 @@ func (s *Server) Shutdown() {
s.Cluster.StopInterNodeCommunication() s.Cluster.StopInterNodeCommunication()
} }
s.platformService.ShutdownMetrics() s.StopMetricsServer()
// This must be done after the cluster is stopped. // This must be done after the cluster is stopped.
if s.Jobs != nil { if s.Jobs != nil {
@@ -1614,9 +1630,104 @@ func doConfigCleanup(s *Server) {
} }
} }
// TODO: remove this method when we switch to using platform service. func (s *Server) StopMetricsServer() {
s.metricsLock.Lock()
defer s.metricsLock.Unlock()
if s.metricsServer != nil {
ctx, cancel := context.WithTimeout(context.Background(), TimeToWaitForConnectionsToCloseOnServerShutdown)
defer cancel()
s.metricsServer.Shutdown(ctx)
s.Log.Info("Metrics and profiling server is stopping")
}
}
func (s *Server) HandleMetrics(route string, h http.Handler) { func (s *Server) HandleMetrics(route string, h http.Handler) {
s.platformService.HandleMetrics(route, h) if s.metricsRouter != nil {
s.metricsRouter.Handle(route, h)
}
}
func (s *Server) InitMetricsRouter() error {
s.metricsRouter = mux.NewRouter()
runtime.SetBlockProfileRate(*s.Config().MetricsSettings.BlockProfileRate)
metricsPage := `
<html>
<body>{{if .}}
<div><a href="/metrics">Metrics</a></div>{{end}}
<div><a href="/debug/pprof/">Profiling Root</a></div>
<div><a href="/debug/pprof/cmdline">Profiling Command Line</a></div>
<div><a href="/debug/pprof/symbol">Profiling Symbols</a></div>
<div><a href="/debug/pprof/goroutine">Profiling Goroutines</a></div>
<div><a href="/debug/pprof/heap">Profiling Heap</a></div>
<div><a href="/debug/pprof/threadcreate">Profiling Threads</a></div>
<div><a href="/debug/pprof/block">Profiling Blocking</a></div>
<div><a href="/debug/pprof/trace">Profiling Execution Trace</a></div>
<div><a href="/debug/pprof/profile">Profiling CPU</a></div>
</body>
</html>
`
metricsPageTmpl, err := template.New("page").Parse(metricsPage)
if err != nil {
return errors.Wrap(err, "failed to create template")
}
rootHandler := func(w http.ResponseWriter, r *http.Request) {
metricsPageTmpl.Execute(w, s.Metrics != nil)
}
s.metricsRouter.HandleFunc("/", rootHandler)
s.metricsRouter.StrictSlash(true)
s.metricsRouter.Handle("/debug", http.RedirectHandler("/", http.StatusMovedPermanently))
s.metricsRouter.HandleFunc("/debug/pprof/", pprof.Index)
s.metricsRouter.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
s.metricsRouter.HandleFunc("/debug/pprof/profile", pprof.Profile)
s.metricsRouter.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
s.metricsRouter.HandleFunc("/debug/pprof/trace", pprof.Trace)
// Manually add support for paths linked to by index page at /debug/pprof/
s.metricsRouter.Handle("/debug/pprof/goroutine", pprof.Handler("goroutine"))
s.metricsRouter.Handle("/debug/pprof/heap", pprof.Handler("heap"))
s.metricsRouter.Handle("/debug/pprof/threadcreate", pprof.Handler("threadcreate"))
s.metricsRouter.Handle("/debug/pprof/block", pprof.Handler("block"))
return nil
}
func (s *Server) startMetricsServer() {
var notify chan struct{}
s.metricsLock.Lock()
defer func() {
if notify != nil {
<-notify
}
s.metricsLock.Unlock()
}()
l, err := net.Listen("tcp", *s.Config().MetricsSettings.ListenAddress)
if err != nil {
mlog.Error(err.Error())
return
}
notify = make(chan struct{})
s.metricsServer = &http.Server{
Handler: handlers.RecoveryHandler(handlers.PrintRecoveryStack(true))(s.metricsRouter),
ReadTimeout: time.Duration(*s.Config().ServiceSettings.ReadTimeout) * time.Second,
WriteTimeout: time.Duration(*s.Config().ServiceSettings.WriteTimeout) * time.Second,
}
go func() {
close(notify)
if err := s.metricsServer.Serve(l); err != nil && err != http.ErrServerClosed {
mlog.Critical(err.Error())
}
}()
s.Log.Info("Metrics and profiling server is started", mlog.String("address", l.Addr().String()))
} }
func (s *Server) sendLicenseUpForRenewalEmail(users map[string]*model.User, license *model.License) *model.AppError { func (s *Server) sendLicenseUpForRenewalEmail(users map[string]*model.User, license *model.License) *model.AppError {

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

@@ -48,7 +48,7 @@ func (*CustomStatusProvider) DoCommand(a *app.App, c *request.Context, args *mod
message = strings.TrimSpace(message) message = strings.TrimSpace(message)
if message == CmdCustomStatusClear { if message == CmdCustomStatusClear {
if err := a.RemoveCustomStatus(args.UserId); err != nil { if err := a.RemoveCustomStatus(c, args.UserId); err != nil {
mlog.Debug(err.Error()) mlog.Debug(err.Error())
return &model.CommandResponse{Text: args.T("api.command_custom_status.clear.app_error"), ResponseType: model.CommandResponseTypeEphemeral} return &model.CommandResponse{Text: args.T("api.command_custom_status.clear.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
} }
@@ -61,7 +61,7 @@ func (*CustomStatusProvider) DoCommand(a *app.App, c *request.Context, args *mod
customStatus := GetCustomStatus(message) customStatus := GetCustomStatus(message)
customStatus.PreSave() customStatus.PreSave()
if err := a.SetCustomStatus(args.UserId, customStatus); err != nil { if err := a.SetCustomStatus(c, args.UserId, customStatus); err != nil {
mlog.Debug(err.Error()) mlog.Debug(err.Error())
return &model.CommandResponse{Text: args.T("api.command_custom_status.app_error"), ResponseType: model.CommandResponseTypeEphemeral} return &model.CommandResponse{Text: args.T("api.command_custom_status.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
} }

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

@@ -165,7 +165,7 @@ func (th *TestHelper) initBasic() *TestHelper {
// create users once and cache them because password hashing is slow // create users once and cache them because password hashing is slow
initBasicOnce.Do(func() { initBasicOnce.Do(func() {
th.SystemAdminUser = th.createUser() th.SystemAdminUser = th.createUser()
th.App.UpdateUserRoles(th.SystemAdminUser.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false) th.App.UpdateUserRoles(th.Context, th.SystemAdminUser.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id) th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id)
userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy() userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy()

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

@@ -8,6 +8,7 @@ import (
"errors" "errors"
"net/http" "net/http"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/shared/mlog"
"github.com/mattermost/mattermost-server/v6/store" "github.com/mattermost/mattermost-server/v6/store"
@@ -405,7 +406,7 @@ func (a *App) UpdateDNDStatusOfUsers() {
} }
} }
func (a *App) SetCustomStatus(userID string, cs *model.CustomStatus) *model.AppError { func (a *App) SetCustomStatus(c request.CTX, userID string, cs *model.CustomStatus) *model.AppError {
if cs == nil || (cs.Emoji == "" && cs.Text == "") { if cs == nil || (cs.Emoji == "" && cs.Text == "") {
return model.NewAppError("SetCustomStatus", "api.custom_status.set_custom_statuses.update.app_error", nil, "", http.StatusBadRequest) return model.NewAppError("SetCustomStatus", "api.custom_status.set_custom_statuses.update.app_error", nil, "", http.StatusBadRequest)
} }
@@ -416,26 +417,26 @@ func (a *App) SetCustomStatus(userID string, cs *model.CustomStatus) *model.AppE
} }
user.SetCustomStatus(cs) user.SetCustomStatus(cs)
_, updateErr := a.UpdateUser(user, true) _, updateErr := a.UpdateUser(c, user, true)
if updateErr != nil { if updateErr != nil {
return updateErr return updateErr
} }
if err := a.addRecentCustomStatus(userID, cs); err != nil { if err := a.addRecentCustomStatus(userID, cs); err != nil {
a.Log().Error("Can't add recent custom status for", mlog.String("userID", userID), mlog.Err(err)) c.Logger().Error("Can't add recent custom status for", mlog.String("userID", userID), mlog.Err(err))
} }
return nil return nil
} }
func (a *App) RemoveCustomStatus(userID string) *model.AppError { func (a *App) RemoveCustomStatus(c request.CTX, userID string) *model.AppError {
user, err := a.GetUser(userID) user, err := a.GetUser(userID)
if err != nil { if err != nil {
return err return err
} }
user.ClearCustomStatus() user.ClearCustomStatus()
_, updateErr := a.UpdateUser(user, true) _, updateErr := a.UpdateUser(c, user, true)
if updateErr != nil { if updateErr != nil {
return updateErr return updateErr
} }

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

@@ -53,14 +53,14 @@ func TestCustomStatus(t *testing.T) {
Text: "honk!", Text: "honk!",
} }
err := th.App.SetCustomStatus(user.Id, cs) err := th.App.SetCustomStatus(th.Context, user.Id, cs)
require.Nil(t, err, "failed to set custom status %v", err) require.Nil(t, err, "failed to set custom status %v", err)
csSaved, err := th.App.GetCustomStatus(user.Id) csSaved, err := th.App.GetCustomStatus(user.Id)
require.Nil(t, err, "failed to get custom status after save %v", err) require.Nil(t, err, "failed to get custom status after save %v", err)
require.Equal(t, cs, csSaved) require.Equal(t, cs, csSaved)
err = th.App.RemoveCustomStatus(user.Id) err = th.App.RemoveCustomStatus(th.Context, user.Id)
require.Nil(t, err, "failed to to clear custom status %v", err) require.Nil(t, err, "failed to to clear custom status %v", err)
var csClear *model.CustomStatus var csClear *model.CustomStatus
@@ -117,9 +117,9 @@ func TestCustomStatusErrors(t *testing.T) {
var appErr *model.AppError var appErr *model.AppError
switch tc.customStatus { switch tc.customStatus {
case "set": case "set":
appErr = th.App.SetCustomStatus(fakeUserID, cs) appErr = th.App.SetCustomStatus(th.Context, fakeUserID, cs)
case "remove": case "remove":
appErr = th.App.RemoveCustomStatus(fakeUserID) appErr = th.App.RemoveCustomStatus(th.Context, fakeUserID)
} }
require.NotNil(t, appErr) require.NotNil(t, appErr)

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

@@ -337,7 +337,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
t.Run("Team with restricted domains skips over members that do not match the allowed domains", func(t *testing.T) { t.Run("Team with restricted domains skips over members that do not match the allowed domains", func(t *testing.T) {
restrictedUser := th.CreateUser() restrictedUser := th.CreateUser()
restrictedUser.Email = "restricted@mattermost.org" restrictedUser.Email = "restricted@mattermost.org"
_, err = th.App.UpdateUser(restrictedUser, false) _, err = th.App.UpdateUser(th.Context, restrictedUser, false)
require.Nil(t, err) require.Nil(t, err)
_, err = th.App.UpsertGroupMember(scienceGroup.Id, restrictedUser.Id) _, err = th.App.UpsertGroupMember(scienceGroup.Id, restrictedUser.Id)
require.Nil(t, err) require.Nil(t, err)

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

@@ -763,7 +763,7 @@ func (a *App) AddUserToTeamByInviteId(c *request.Context, inviteId string, userI
return team, teamMember, nil return team, teamMember, nil
} }
func (a *App) JoinUserToTeam(c *request.Context, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) { func (a *App) JoinUserToTeam(c request.CTX, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) {
teamMember, alreadyAdded, err := a.ch.srv.teamService.JoinUserToTeam(team, user) teamMember, alreadyAdded, err := a.ch.srv.teamService.JoinUserToTeam(team, user)
if err != nil { if err != nil {
var appErr *model.AppError var appErr *model.AppError

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

@@ -43,7 +43,7 @@ const (
ImageProfilePixelDimension = 128 ImageProfilePixelDimension = 128
) )
func (a *App) CreateUserWithToken(c *request.Context, user *model.User, token *model.Token) (*model.User, *model.AppError) { func (a *App) CreateUserWithToken(c request.CTX, user *model.User, token *model.Token) (*model.User, *model.AppError) {
if err := a.IsUserSignUpAllowed(); err != nil { if err := a.IsUserSignUpAllowed(); err != nil {
return nil, err return nil, err
} }
@@ -104,19 +104,19 @@ func (a *App) CreateUserWithToken(c *request.Context, user *model.User, token *m
for _, channel := range channels { for _, channel := range channels {
_, err := a.AddChannelMember(c, ruser.Id, channel, ChannelMemberOpts{}) _, err := a.AddChannelMember(c, ruser.Id, channel, ChannelMemberOpts{})
if err != nil { if err != nil {
mlog.Warn("Failed to add channel member", mlog.Err(err)) c.Logger().Warn("Failed to add channel member", mlog.Err(err))
} }
} }
} }
if err := a.DeleteToken(token); err != nil { if err := a.DeleteToken(token); err != nil {
mlog.Warn("Error while deleting token", mlog.Err(err)) c.Logger().Warn("Error while deleting token", mlog.Err(err))
} }
return ruser, nil return ruser, nil
} }
func (a *App) CreateUserWithInviteId(c *request.Context, user *model.User, inviteId, redirect string) (*model.User, *model.AppError) { func (a *App) CreateUserWithInviteId(c request.CTX, user *model.User, inviteId, redirect string) (*model.User, *model.AppError) {
if err := a.IsUserSignUpAllowed(); err != nil { if err := a.IsUserSignUpAllowed(); err != nil {
return nil, err return nil, err
} }
@@ -154,26 +154,26 @@ func (a *App) CreateUserWithInviteId(c *request.Context, user *model.User, invit
a.AddDirectChannels(c, team.Id, ruser) a.AddDirectChannels(c, team.Id, ruser)
if err := a.Srv().EmailService.SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.DisableWelcomeEmail, ruser.Locale, a.GetSiteURL(), redirect); err != nil { if err := a.Srv().EmailService.SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.DisableWelcomeEmail, ruser.Locale, a.GetSiteURL(), redirect); err != nil {
mlog.Warn("Failed to send welcome email on create user with inviteId", mlog.Err(err)) c.Logger().Warn("Failed to send welcome email on create user with inviteId", mlog.Err(err))
} }
return ruser, nil return ruser, nil
} }
func (a *App) CreateUserAsAdmin(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) { func (a *App) CreateUserAsAdmin(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError) {
ruser, err := a.CreateUser(c, user) ruser, err := a.CreateUser(c, user)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if err := a.Srv().EmailService.SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.DisableWelcomeEmail, ruser.Locale, a.GetSiteURL(), redirect); err != nil { if err := a.Srv().EmailService.SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.DisableWelcomeEmail, ruser.Locale, a.GetSiteURL(), redirect); err != nil {
mlog.Warn("Failed to send welcome email to the new user, created by system admin", mlog.Err(err)) c.Logger().Warn("Failed to send welcome email to the new user, created by system admin", mlog.Err(err))
} }
return ruser, nil return ruser, nil
} }
func (a *App) CreateUserFromSignup(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) { func (a *App) CreateUserFromSignup(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError) {
if err := a.IsUserSignUpAllowed(); err != nil { if err := a.IsUserSignUpAllowed(); err != nil {
return nil, err return nil, err
} }
@@ -191,7 +191,7 @@ func (a *App) CreateUserFromSignup(c *request.Context, user *model.User, redirec
} }
if err := a.Srv().EmailService.SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.DisableWelcomeEmail, ruser.Locale, a.GetSiteURL(), redirect); err != nil { if err := a.Srv().EmailService.SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.DisableWelcomeEmail, ruser.Locale, a.GetSiteURL(), redirect); err != nil {
mlog.Warn("Failed to send welcome email on create user from signup", mlog.Err(err)) c.Logger().Warn("Failed to send welcome email on create user from signup", mlog.Err(err))
} }
return ruser, nil return ruser, nil
@@ -211,17 +211,17 @@ func (a *App) IsFirstUserAccount() bool {
// CreateUser creates a user and sets several fields of the returned User struct to // CreateUser creates a user and sets several fields of the returned User struct to
// their zero values. // their zero values.
func (a *App) CreateUser(c *request.Context, user *model.User) (*model.User, *model.AppError) { func (a *App) CreateUser(c request.CTX, user *model.User) (*model.User, *model.AppError) {
return a.createUserOrGuest(c, user, false) return a.createUserOrGuest(c, user, false)
} }
// CreateGuest creates a guest and sets several fields of the returned User struct to // CreateGuest creates a guest and sets several fields of the returned User struct to
// their zero values. // their zero values.
func (a *App) CreateGuest(c *request.Context, user *model.User) (*model.User, *model.AppError) { func (a *App) CreateGuest(c request.CTX, user *model.User) (*model.User, *model.AppError) {
return a.createUserOrGuest(c, user, true) return a.createUserOrGuest(c, user, true)
} }
func (a *App) createUserOrGuest(c *request.Context, user *model.User, guest bool) (*model.User, *model.AppError) { func (a *App) createUserOrGuest(c request.CTX, user *model.User, guest bool) (*model.User, *model.AppError) {
if err := a.isUniqueToGroupNames(user.Username); err != nil { if err := a.isUniqueToGroupNames(user.Username); err != nil {
err.Where = "createUserOrGuest" err.Where = "createUserOrGuest"
return nil, err return nil, err
@@ -285,7 +285,7 @@ func (a *App) createUserOrGuest(c *request.Context, user *model.User, guest bool
} }
if err := a.Srv().Store.Preference().Save(preferences); err != nil { if err := a.Srv().Store.Preference().Save(preferences); err != nil {
mlog.Warn("Encountered error saving user preferences", mlog.Err(err)) c.Logger().Warn("Encountered error saving user preferences", mlog.Err(err))
} }
go a.UpdateViewedProductNoticesForNewUser(ruser.Id) go a.UpdateViewedProductNoticesForNewUser(ruser.Id)
@@ -347,7 +347,7 @@ func (a *App) CreateOAuthUser(c *request.Context, service string, userData io.Re
if provider.IsSameUser(userByEmail, user) { if provider.IsSameUser(userByEmail, user) {
if _, err := a.Srv().Store.User().UpdateAuthData(userByEmail.Id, user.AuthService, user.AuthData, "", false); err != nil { if _, err := a.Srv().Store.User().UpdateAuthData(userByEmail.Id, user.AuthService, user.AuthData, "", false); err != nil {
// if the user is not updated, write a warning to the log, but don't prevent user login // if the user is not updated, write a warning to the log, but don't prevent user login
mlog.Warn("Error attempting to update user AuthData", mlog.Err(err)) c.Logger().Warn("Error attempting to update user AuthData", mlog.Err(err))
} }
return userByEmail, nil return userByEmail, nil
} }
@@ -369,7 +369,7 @@ func (a *App) CreateOAuthUser(c *request.Context, service string, userData io.Re
err = a.AddDirectChannels(c, teamID, user) err = a.AddDirectChannels(c, teamID, user)
if err != nil { if err != nil {
mlog.Warn("Failed to add direct channels", mlog.Err(err)) c.Logger().Warn("Failed to add direct channels", mlog.Err(err))
} }
} }
@@ -759,7 +759,7 @@ func (a *App) GetDefaultProfileImage(user *model.User) ([]byte, *model.AppError)
return a.ch.srv.GetDefaultProfileImage(user) return a.ch.srv.GetDefaultProfileImage(user)
} }
func (a *App) SetDefaultProfileImage(user *model.User) *model.AppError { func (a *App) SetDefaultProfileImage(c request.CTX, user *model.User) *model.AppError {
img, appErr := a.GetDefaultProfileImage(user) img, appErr := a.GetDefaultProfileImage(user)
if appErr != nil { if appErr != nil {
return appErr return appErr
@@ -771,14 +771,14 @@ func (a *App) SetDefaultProfileImage(user *model.User) *model.AppError {
} }
if err := a.Srv().Store.User().ResetLastPictureUpdate(user.Id); err != nil { if err := a.Srv().Store.User().ResetLastPictureUpdate(user.Id); err != nil {
mlog.Warn("Failed to reset last picture update", mlog.Err(err)) c.Logger().Warn("Failed to reset last picture update", mlog.Err(err))
} }
a.InvalidateCacheForUser(user.Id) a.InvalidateCacheForUser(user.Id)
updatedUser, appErr := a.GetUser(user.Id) updatedUser, appErr := a.GetUser(user.Id)
if appErr != nil { if appErr != nil {
mlog.Warn("Error in getting users profile forcing logout", mlog.String("user_id", user.Id), mlog.Err(appErr)) c.Logger().Warn("Error in getting users profile forcing logout", mlog.String("user_id", user.Id), mlog.Err(appErr))
return nil return nil
} }
@@ -792,21 +792,21 @@ func (a *App) SetDefaultProfileImage(user *model.User) *model.AppError {
return nil return nil
} }
func (a *App) SetProfileImage(userID string, imageData *multipart.FileHeader) *model.AppError { func (a *App) SetProfileImage(c request.CTX, userID string, imageData *multipart.FileHeader) *model.AppError {
file, err := imageData.Open() file, err := imageData.Open()
if err != nil { if err != nil {
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.open.app_error", nil, err.Error(), http.StatusBadRequest) return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.open.app_error", nil, err.Error(), http.StatusBadRequest)
} }
defer file.Close() defer file.Close()
return a.SetProfileImageFromMultiPartFile(userID, file) return a.SetProfileImageFromMultiPartFile(c, userID, file)
} }
func (a *App) SetProfileImageFromMultiPartFile(userID string, file multipart.File) *model.AppError { func (a *App) SetProfileImageFromMultiPartFile(c request.CTX, userID string, file multipart.File) *model.AppError {
if limitErr := checkImageLimits(file, *a.Config().FileSettings.MaxImageResolution); limitErr != nil { if limitErr := checkImageLimits(file, *a.Config().FileSettings.MaxImageResolution); limitErr != nil {
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.check_image_limits.app_error", nil, "", http.StatusBadRequest) return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.check_image_limits.app_error", nil, "", http.StatusBadRequest)
} }
return a.SetProfileImageFromFile(userID, file) return a.SetProfileImageFromFile(c, userID, file)
} }
func (a *App) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) { func (a *App) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) {
@@ -831,7 +831,7 @@ func (a *App) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) {
return buf, nil return buf, nil
} }
func (a *App) SetProfileImageFromFile(userID string, file io.Reader) *model.AppError { func (a *App) SetProfileImageFromFile(c request.CTX, userID string, file io.Reader) *model.AppError {
buf, err := a.AdjustImage(file) buf, err := a.AdjustImage(file)
if err != nil { if err != nil {
return err return err
@@ -847,7 +847,7 @@ func (a *App) SetProfileImageFromFile(userID string, file io.Reader) *model.AppE
} }
if err := a.Srv().Store.User().UpdateLastPictureUpdate(userID); err != nil { if err := a.Srv().Store.User().UpdateLastPictureUpdate(userID); err != nil {
mlog.Warn("Error with updating last picture update", mlog.Err(err)) c.Logger().Warn("Error with updating last picture update", mlog.Err(err))
} }
a.invalidateUserCacheAndPublish(userID) a.invalidateUserCacheAndPublish(userID)
a.onUserProfileChange(userID) a.onUserProfileChange(userID)
@@ -855,7 +855,7 @@ func (a *App) SetProfileImageFromFile(userID string, file io.Reader) *model.AppE
return nil return nil
} }
func (a *App) UpdatePasswordAsUser(userID, currentPassword, newPassword string) *model.AppError { func (a *App) UpdatePasswordAsUser(c request.CTX, userID, currentPassword, newPassword string) *model.AppError {
user, err := a.GetUser(userID) user, err := a.GetUser(userID)
if err != nil { if err != nil {
return err return err
@@ -880,7 +880,7 @@ func (a *App) UpdatePasswordAsUser(userID, currentPassword, newPassword string)
T := i18n.GetUserTranslations(user.Locale) T := i18n.GetUserTranslations(user.Locale)
return a.UpdatePasswordSendEmail(user, newPassword, T("api.user.update_password.menu")) return a.UpdatePasswordSendEmail(c, user, newPassword, T("api.user.update_password.menu"))
} }
func (a *App) userDeactivated(c *request.Context, userID string) *model.AppError { func (a *App) userDeactivated(c *request.Context, userID string) *model.AppError {
@@ -999,8 +999,8 @@ func (a *App) SanitizeProfile(user *model.User, asAdmin bool) {
user.SanitizeProfile(options) user.SanitizeProfile(options)
} }
func (a *App) UpdateUserAsUser(user *model.User, asAdmin bool) (*model.User, *model.AppError) { func (a *App) UpdateUserAsUser(c request.CTX, user *model.User, asAdmin bool) (*model.User, *model.AppError) {
updatedUser, err := a.UpdateUser(user, true) updatedUser, err := a.UpdateUser(c, user, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1039,7 +1039,7 @@ func (a *App) CheckProviderAttributes(user *model.User, patch *model.UserPatch)
return conflictField return conflictField
} }
func (a *App) PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) { func (a *App) PatchUser(c request.CTX, userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) {
user, err := a.GetUser(userID) user, err := a.GetUser(userID)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -1047,7 +1047,7 @@ func (a *App) PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*m
user.Patch(patch) user.Patch(patch)
updatedUser, err := a.UpdateUser(user, true) updatedUser, err := a.UpdateUser(c, user, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1112,7 +1112,7 @@ func (a *App) isUniqueToGroupNames(val string) *model.AppError {
return nil return nil
} }
func (a *App) UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError) { func (a *App) UpdateUser(c request.CTX, user *model.User, sendNotifications bool) (*model.User, *model.AppError) {
prev, err := a.ch.srv.userService.GetUser(user.Id) prev, err := a.ch.srv.userService.GetUser(user.Id)
if err != nil { if err != nil {
var nfErr *store.ErrNotFound var nfErr *store.ErrNotFound
@@ -1192,13 +1192,13 @@ func (a *App) UpdateUser(user *model.User, sendNotifications bool) (*model.User,
if *a.Config().EmailSettings.RequireEmailVerification { if *a.Config().EmailSettings.RequireEmailVerification {
a.Srv().Go(func() { a.Srv().Go(func() {
if err := a.SendEmailVerification(userUpdate.New, newEmail, ""); err != nil { if err := a.SendEmailVerification(userUpdate.New, newEmail, ""); err != nil {
mlog.Error("Failed to send email verification", mlog.Err(err)) c.Logger().Error("Failed to send email verification", mlog.Err(err))
} }
}) })
} else { } else {
a.Srv().Go(func() { a.Srv().Go(func() {
if err := a.Srv().EmailService.SendEmailChangeEmail(userUpdate.Old.Email, userUpdate.New.Email, userUpdate.New.Locale, a.GetSiteURL()); err != nil { if err := a.Srv().EmailService.SendEmailChangeEmail(userUpdate.Old.Email, userUpdate.New.Email, userUpdate.New.Locale, a.GetSiteURL()); err != nil {
mlog.Error("Failed to send email change email", mlog.Err(err)) c.Logger().Error("Failed to send email change email", mlog.Err(err))
} }
}) })
} }
@@ -1207,7 +1207,7 @@ func (a *App) UpdateUser(user *model.User, sendNotifications bool) (*model.User,
if userUpdate.New.Username != userUpdate.Old.Username { if userUpdate.New.Username != userUpdate.Old.Username {
a.Srv().Go(func() { a.Srv().Go(func() {
if err := a.Srv().EmailService.SendChangeUsernameEmail(userUpdate.New.Username, userUpdate.New.Email, userUpdate.New.Locale, a.GetSiteURL()); err != nil { if err := a.Srv().EmailService.SendChangeUsernameEmail(userUpdate.New.Username, userUpdate.New.Email, userUpdate.New.Locale, a.GetSiteURL()); err != nil {
mlog.Error("Failed to send change username email", mlog.Err(err)) c.Logger().Error("Failed to send change username email", mlog.Err(err))
} }
}) })
} }
@@ -1251,7 +1251,7 @@ func (a *App) updateUserNotifyProps(userID string, props map[string]string) *mod
return nil return nil
} }
func (a *App) UpdateMfa(activate bool, userID, token string) *model.AppError { func (a *App) UpdateMfa(c request.CTX, activate bool, userID, token string) *model.AppError {
if activate { if activate {
if err := a.ActivateMfa(userID, token); err != nil { if err := a.ActivateMfa(userID, token); err != nil {
return err return err
@@ -1265,25 +1265,25 @@ func (a *App) UpdateMfa(activate bool, userID, token string) *model.AppError {
a.Srv().Go(func() { a.Srv().Go(func() {
user, err := a.GetUser(userID) user, err := a.GetUser(userID)
if err != nil { if err != nil {
mlog.Error("Failed to get user", mlog.Err(err)) c.Logger().Error("Failed to get user", mlog.Err(err))
return return
} }
if err := a.Srv().EmailService.SendMfaChangeEmail(user.Email, activate, user.Locale, a.GetSiteURL()); err != nil { if err := a.Srv().EmailService.SendMfaChangeEmail(user.Email, activate, user.Locale, a.GetSiteURL()); err != nil {
mlog.Error("Failed to send mfa change email", mlog.Err(err)) c.Logger().Error("Failed to send mfa change email", mlog.Err(err))
} }
}) })
return nil return nil
} }
func (a *App) UpdatePasswordByUserIdSendEmail(userID, newPassword, method string) *model.AppError { func (a *App) UpdatePasswordByUserIdSendEmail(c request.CTX, userID, newPassword, method string) *model.AppError {
user, err := a.GetUser(userID) user, err := a.GetUser(userID)
if err != nil { if err != nil {
return err return err
} }
return a.UpdatePasswordSendEmail(user, newPassword, method) return a.UpdatePasswordSendEmail(c, user, newPassword, method)
} }
func (a *App) UpdatePassword(user *model.User, newPassword string) *model.AppError { func (a *App) UpdatePassword(user *model.User, newPassword string) *model.AppError {
@@ -1302,14 +1302,14 @@ func (a *App) UpdatePassword(user *model.User, newPassword string) *model.AppErr
return nil return nil
} }
func (a *App) UpdatePasswordSendEmail(user *model.User, newPassword, method string) *model.AppError { func (a *App) UpdatePasswordSendEmail(c request.CTX, user *model.User, newPassword, method string) *model.AppError {
if err := a.UpdatePassword(user, newPassword); err != nil { if err := a.UpdatePassword(user, newPassword); err != nil {
return err return err
} }
a.Srv().Go(func() { a.Srv().Go(func() {
if err := a.Srv().EmailService.SendPasswordChangeEmail(user.Email, method, user.Locale, a.GetSiteURL()); err != nil { if err := a.Srv().EmailService.SendPasswordChangeEmail(user.Email, method, user.Locale, a.GetSiteURL()); err != nil {
mlog.Error("Failed to send password change email", mlog.Err(err)) c.Logger().Error("Failed to send password change email", mlog.Err(err))
} }
}) })
@@ -1335,11 +1335,11 @@ func (a *App) UpdateHashedPassword(user *model.User, newHashedPassword string) *
return nil return nil
} }
func (a *App) ResetPasswordFromToken(userSuppliedTokenString, newPassword string) *model.AppError { func (a *App) ResetPasswordFromToken(c request.CTX, userSuppliedTokenString, newPassword string) *model.AppError {
return a.resetPasswordFromToken(userSuppliedTokenString, newPassword, model.GetMillis()) return a.resetPasswordFromToken(c, userSuppliedTokenString, newPassword, model.GetMillis())
} }
func (a *App) resetPasswordFromToken(userSuppliedTokenString, newPassword string, nowMilli int64) *model.AppError { func (a *App) resetPasswordFromToken(c request.CTX, userSuppliedTokenString, newPassword string, nowMilli int64) *model.AppError {
token, err := a.GetPasswordRecoveryToken(userSuppliedTokenString) token, err := a.GetPasswordRecoveryToken(userSuppliedTokenString)
if err != nil { if err != nil {
return err return err
@@ -1373,12 +1373,12 @@ func (a *App) resetPasswordFromToken(userSuppliedTokenString, newPassword string
T := i18n.GetUserTranslations(user.Locale) T := i18n.GetUserTranslations(user.Locale)
if err := a.UpdatePasswordSendEmail(user, newPassword, T("api.user.reset_password.method")); err != nil { if err := a.UpdatePasswordSendEmail(c, user, newPassword, T("api.user.reset_password.method")); err != nil {
return err return err
} }
if err := a.DeleteToken(token); err != nil { if err := a.DeleteToken(token); err != nil {
mlog.Warn("Failed to delete token", mlog.Err(err)) c.Logger().Warn("Failed to delete token", mlog.Err(err))
} }
return nil return nil
@@ -1474,17 +1474,17 @@ func (a *App) DeleteToken(token *model.Token) *model.AppError {
return nil return nil
} }
func (a *App) UpdateUserRoles(userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) { func (a *App) UpdateUserRoles(c request.CTX, userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) {
user, err := a.GetUser(userID) user, err := a.GetUser(userID)
if err != nil { if err != nil {
err.StatusCode = http.StatusBadRequest err.StatusCode = http.StatusBadRequest
return nil, err return nil, err
} }
return a.UpdateUserRolesWithUser(user, newRoles, sendWebSocketEvent) return a.UpdateUserRolesWithUser(c, user, newRoles, sendWebSocketEvent)
} }
func (a *App) UpdateUserRolesWithUser(user *model.User, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) { func (a *App) UpdateUserRolesWithUser(c request.CTX, user *model.User, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) {
if err := a.CheckRolesExist(strings.Fields(newRoles)); err != nil { if err := a.CheckRolesExist(strings.Fields(newRoles)); err != nil {
return nil, err return nil, err
@@ -1522,7 +1522,7 @@ func (a *App) UpdateUserRolesWithUser(user *model.User, newRoles string, sendWeb
if result := <-schan; result.NErr != nil { if result := <-schan; result.NErr != nil {
// soft error since the user roles were still updated // soft error since the user roles were still updated
mlog.Warn("Failed during updating user roles", mlog.Err(result.NErr)) c.Logger().Warn("Failed during updating user roles", mlog.Err(result.NErr))
} }
a.InvalidateCacheForUser(user.Id) a.InvalidateCacheForUser(user.Id)
@@ -1539,9 +1539,9 @@ func (a *App) UpdateUserRolesWithUser(user *model.User, newRoles string, sendWeb
} }
func (a *App) PermanentDeleteUser(c *request.Context, user *model.User) *model.AppError { func (a *App) PermanentDeleteUser(c *request.Context, user *model.User) *model.AppError {
mlog.Warn("Attempting to permanently delete account", mlog.String("user_id", user.Id), mlog.String("user_email", user.Email)) c.Logger().Warn("Attempting to permanently delete account", mlog.String("user_id", user.Id), mlog.String("user_email", user.Email))
if user.IsInRole(model.SystemAdminRoleId) { if user.IsInRole(model.SystemAdminRoleId) {
mlog.Warn("You are deleting a user that is a system administrator. You may need to set another account as the system administrator using the command line tools.", mlog.String("user_email", user.Email)) c.Logger().Warn("You are deleting a user that is a system administrator. You may need to set another account as the system administrator using the command line tools.", mlog.String("user_email", user.Email))
} }
if _, err := a.UpdateActive(c, user, false); err != nil { if _, err := a.UpdateActive(c, user, false); err != nil {
@@ -1600,13 +1600,13 @@ func (a *App) PermanentDeleteUser(c *request.Context, user *model.User) *model.A
infos, err := a.Srv().Store.FileInfo().GetForUser(user.Id) infos, err := a.Srv().Store.FileInfo().GetForUser(user.Id)
if err != nil { if err != nil {
mlog.Warn("Error getting file list for user from FileInfoStore", mlog.Err(err)) c.Logger().Warn("Error getting file list for user from FileInfoStore", mlog.Err(err))
} }
for _, info := range infos { for _, info := range infos {
res, err := a.FileExists(info.Path) res, err := a.FileExists(info.Path)
if err != nil { if err != nil {
mlog.Warn( c.Logger().Warn(
"Error checking existence of file", "Error checking existence of file",
mlog.String("path", info.Path), mlog.String("path", info.Path),
mlog.Err(err), mlog.Err(err),
@@ -1615,14 +1615,14 @@ func (a *App) PermanentDeleteUser(c *request.Context, user *model.User) *model.A
} }
if !res { if !res {
mlog.Warn("File not found", mlog.String("path", info.Path)) c.Logger().Warn("File not found", mlog.String("path", info.Path))
continue continue
} }
err = a.RemoveFile(info.Path) err = a.RemoveFile(info.Path)
if err != nil { if err != nil {
mlog.Warn( c.Logger().Warn(
"Unable to remove file", "Unable to remove file",
mlog.String("path", info.Path), mlog.String("path", info.Path),
mlog.Err(err), mlog.Err(err),
@@ -1646,7 +1646,7 @@ func (a *App) PermanentDeleteUser(c *request.Context, user *model.User) *model.A
return model.NewAppError("PermanentDeleteUser", "app.team.remove_member.app_error", nil, err.Error(), http.StatusInternalServerError) return model.NewAppError("PermanentDeleteUser", "app.team.remove_member.app_error", nil, err.Error(), http.StatusInternalServerError)
} }
mlog.Warn("Permanently deleted account", mlog.String("user_email", user.Email), mlog.String("user_id", user.Id)) c.Logger().Warn("Permanently deleted account", mlog.String("user_email", user.Email), mlog.String("user_id", user.Id))
return nil return nil
} }
@@ -1693,7 +1693,7 @@ func (a *App) SendEmailVerification(user *model.User, newEmail, redirect string)
return nil return nil
} }
func (a *App) VerifyEmailFromToken(userSuppliedTokenString string) *model.AppError { func (a *App) VerifyEmailFromToken(c request.CTX, userSuppliedTokenString string) *model.AppError {
token, err := a.GetVerifyEmailToken(userSuppliedTokenString) token, err := a.GetVerifyEmailToken(userSuppliedTokenString)
if err != nil { if err != nil {
return err return err
@@ -1731,7 +1731,7 @@ func (a *App) VerifyEmailFromToken(userSuppliedTokenString string) *model.AppErr
} }
if err := a.DeleteToken(token); err != nil { if err := a.DeleteToken(token); err != nil {
mlog.Warn("Failed to delete token", mlog.Err(err)) c.Logger().Warn("Failed to delete token", mlog.Err(err))
} }
return nil return nil
@@ -2163,23 +2163,23 @@ func (a *App) PromoteGuestToUser(c *request.Context, user *model.User, requestor
for _, team := range userTeams { for _, team := range userTeams {
// Soft error if there is an issue joining the default channels // Soft error if there is an issue joining the default channels
if err := a.JoinDefaultChannels(c, team.Id, user, false, requestorId); err != nil { if err := a.JoinDefaultChannels(c, team.Id, user, false, requestorId); err != nil {
mlog.Warn("Failed to join default channels", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.String("requestor_id", requestorId), mlog.Err(err)) c.Logger().Warn("Failed to join default channels", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.String("requestor_id", requestorId), mlog.Err(err))
} }
} }
promotedUser, err := a.GetUser(user.Id) promotedUser, err := a.GetUser(user.Id)
if err != nil { if err != nil {
mlog.Warn("Failed to get user on promote guest to user", mlog.Err(err)) c.Logger().Warn("Failed to get user on promote guest to user", mlog.Err(err))
} else { } else {
a.sendUpdatedUserEvent(*promotedUser) a.sendUpdatedUserEvent(*promotedUser)
if uErr := a.ch.srv.userService.UpdateSessionsIsGuest(promotedUser.Id, promotedUser.IsGuest()); uErr != nil { if uErr := a.ch.srv.userService.UpdateSessionsIsGuest(promotedUser.Id, promotedUser.IsGuest()); uErr != nil {
mlog.Warn("Unable to update user sessions", mlog.String("user_id", promotedUser.Id), mlog.Err(uErr)) c.Logger().Warn("Unable to update user sessions", mlog.String("user_id", promotedUser.Id), mlog.Err(uErr))
} }
} }
teamMembers, err := a.GetTeamMembersForUser(user.Id, "", true) teamMembers, err := a.GetTeamMembersForUser(user.Id, "", true)
if err != nil { if err != nil {
mlog.Warn("Failed to get team members for user on promote guest to user", mlog.Err(err)) c.Logger().Warn("Failed to get team members for user on promote guest to user", mlog.Err(err))
} }
for _, member := range teamMembers { for _, member := range teamMembers {
@@ -2187,7 +2187,7 @@ func (a *App) PromoteGuestToUser(c *request.Context, user *model.User, requestor
channelMembers, err := a.GetChannelMembersForUser(c, member.TeamId, user.Id) channelMembers, err := a.GetChannelMembersForUser(c, member.TeamId, user.Id)
if err != nil { if err != nil {
mlog.Warn("Failed to get channel members for user on promote guest to user", mlog.Err(err)) c.Logger().Warn("Failed to get channel members for user on promote guest to user", mlog.Err(err))
} }
for _, member := range channelMembers { for _, member := range channelMembers {
@@ -2196,7 +2196,7 @@ func (a *App) PromoteGuestToUser(c *request.Context, user *model.User, requestor
evt := model.NewWebSocketEvent(model.WebsocketEventChannelMemberUpdated, "", "", user.Id, nil) evt := model.NewWebSocketEvent(model.WebsocketEventChannelMemberUpdated, "", "", user.Id, nil)
memberJSON, jsonErr := json.Marshal(member) memberJSON, jsonErr := json.Marshal(member)
if jsonErr != nil { if jsonErr != nil {
mlog.Warn("Failed to encode channel member to JSON", mlog.Err(jsonErr)) c.Logger().Warn("Failed to encode channel member to JSON", mlog.Err(jsonErr))
} }
evt.Add("channelMember", string(memberJSON)) evt.Add("channelMember", string(memberJSON))
a.Publish(evt) a.Publish(evt)
@@ -2218,12 +2218,12 @@ func (a *App) DemoteUserToGuest(c request.CTX, user *model.User) *model.AppError
a.sendUpdatedUserEvent(*demotedUser) a.sendUpdatedUserEvent(*demotedUser)
if uErr := a.ch.srv.userService.UpdateSessionsIsGuest(demotedUser.Id, demotedUser.IsGuest()); uErr != nil { if uErr := a.ch.srv.userService.UpdateSessionsIsGuest(demotedUser.Id, demotedUser.IsGuest()); uErr != nil {
mlog.Warn("Unable to update user sessions", mlog.String("user_id", demotedUser.Id), mlog.Err(uErr)) c.Logger().Warn("Unable to update user sessions", mlog.String("user_id", demotedUser.Id), mlog.Err(uErr))
} }
teamMembers, err := a.GetTeamMembersForUser(user.Id, "", true) teamMembers, err := a.GetTeamMembersForUser(user.Id, "", true)
if err != nil { if err != nil {
mlog.Warn("Failed to get team members for users on demote user to guest", mlog.Err(err)) c.Logger().Warn("Failed to get team members for users on demote user to guest", mlog.Err(err))
} }
for _, member := range teamMembers { for _, member := range teamMembers {
@@ -2231,7 +2231,7 @@ func (a *App) DemoteUserToGuest(c request.CTX, user *model.User) *model.AppError
channelMembers, err := a.GetChannelMembersForUser(c, member.TeamId, user.Id) channelMembers, err := a.GetChannelMembersForUser(c, member.TeamId, user.Id)
if err != nil { if err != nil {
mlog.Warn("Failed to get channel members for users on demote user to guest", mlog.Err(err)) c.Logger().Warn("Failed to get channel members for users on demote user to guest", mlog.Err(err))
continue continue
} }
@@ -2241,7 +2241,7 @@ func (a *App) DemoteUserToGuest(c request.CTX, user *model.User) *model.AppError
evt := model.NewWebSocketEvent(model.WebsocketEventChannelMemberUpdated, "", "", user.Id, nil) evt := model.NewWebSocketEvent(model.WebsocketEventChannelMemberUpdated, "", "", user.Id, nil)
memberJSON, jsonErr := json.Marshal(member) memberJSON, jsonErr := json.Marshal(member)
if jsonErr != nil { if jsonErr != nil {
mlog.Warn("Failed to encode channel member to JSON", mlog.Err(jsonErr)) c.Logger().Warn("Failed to encode channel member to JSON", mlog.Err(jsonErr))
} }
evt.Add("channelMember", string(memberJSON)) evt.Add("channelMember", string(memberJSON))
a.Publish(evt) a.Publish(evt)
@@ -2295,8 +2295,8 @@ func (a *App) GetKnownUsers(userID string) ([]string, *model.AppError) {
} }
// ConvertBotToUser converts a bot to user. // ConvertBotToUser converts a bot to user.
func (a *App) ConvertBotToUser(bot *model.Bot, userPatch *model.UserPatch, sysadmin bool) (*model.User, *model.AppError) { func (a *App) ConvertBotToUser(c request.CTX, bot *model.Bot, userPatch *model.UserPatch, sysadmin bool) (*model.User, *model.AppError) {
user, nErr := a.Srv().Store.User().Get(context.Background(), bot.UserId) user, nErr := a.Srv().Store.User().Get(c.Context(), bot.UserId)
if nErr != nil { if nErr != nil {
var nfErr *store.ErrNotFound var nfErr *store.ErrNotFound
switch { switch {
@@ -2308,7 +2308,7 @@ func (a *App) ConvertBotToUser(bot *model.Bot, userPatch *model.UserPatch, sysad
} }
if sysadmin && !user.IsInRole(model.SystemAdminRoleId) { if sysadmin && !user.IsInRole(model.SystemAdminRoleId) {
_, appErr := a.UpdateUserRoles( _, appErr := a.UpdateUserRoles(c,
user.Id, user.Id,
fmt.Sprintf("%s %s", user.Roles, model.SystemAdminRoleId), fmt.Sprintf("%s %s", user.Roles, model.SystemAdminRoleId),
false) false)
@@ -2319,7 +2319,7 @@ func (a *App) ConvertBotToUser(bot *model.Bot, userPatch *model.UserPatch, sysad
user.Patch(userPatch) user.Patch(userPatch)
user, err := a.UpdateUser(user, false) user, err := a.UpdateUser(c, user, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -2518,7 +2518,7 @@ func (a *App) UpdateThreadFollowForUserFromChannelAdd(c request.CTX, userID, tea
payload, jsonErr := json.Marshal(userThread) payload, jsonErr := json.Marshal(userThread)
if jsonErr != nil { if jsonErr != nil {
mlog.Warn("Failed to encode thread to JSON") c.Logger().Warn("Failed to encode thread to JSON")
} }
message.Add("thread", string(payload)) message.Add("thread", string(payload))
message.Add("previous_unread_replies", int64(0)) message.Add("previous_unread_replies", int64(0))

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

@@ -88,7 +88,7 @@ func TestSetDefaultProfileImage(t *testing.T) {
th := Setup(t).InitBasic() th := Setup(t).InitBasic()
defer th.TearDown() defer th.TearDown()
err := th.App.SetDefaultProfileImage(&model.User{ err := th.App.SetDefaultProfileImage(th.Context, &model.User{
Id: model.NewId(), Id: model.NewId(),
Username: "notvaliduser", Username: "notvaliduser",
}) })
@@ -97,7 +97,7 @@ func TestSetDefaultProfileImage(t *testing.T) {
user := th.BasicUser user := th.BasicUser
err = th.App.SetDefaultProfileImage(user) err = th.App.SetDefaultProfileImage(th.Context, user)
require.Nil(t, err) require.Nil(t, err)
user = getUserFromDB(th.App, user.Id, t) user = getUserFromDB(th.App, user.Id, t)
@@ -140,11 +140,11 @@ func TestUpdateUserToRestrictedDomain(t *testing.T) {
*cfg.TeamSettings.RestrictCreationToDomains = "foo.com" *cfg.TeamSettings.RestrictCreationToDomains = "foo.com"
}) })
_, err := th.App.UpdateUser(user, false) _, err := th.App.UpdateUser(th.Context, user, false)
assert.Nil(t, err) assert.Nil(t, err)
user.Email = "asdf@ghjk.l" user.Email = "asdf@ghjk.l"
_, err = th.App.UpdateUser(user, false) _, err = th.App.UpdateUser(th.Context, user, false)
assert.NotNil(t, err) assert.NotNil(t, err)
t.Run("Restricted Domains must be ignored for guest users", func(t *testing.T) { t.Run("Restricted Domains must be ignored for guest users", func(t *testing.T) {
@@ -156,7 +156,7 @@ func TestUpdateUserToRestrictedDomain(t *testing.T) {
}) })
guest.Email = "asdf@bar.com" guest.Email = "asdf@bar.com"
updatedGuest, err := th.App.UpdateUser(guest, false) updatedGuest, err := th.App.UpdateUser(th.Context, guest, false)
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, guest.Email, updatedGuest.Email) require.Equal(t, guest.Email, updatedGuest.Email)
}) })
@@ -170,11 +170,11 @@ func TestUpdateUserToRestrictedDomain(t *testing.T) {
}) })
guest.Email = "asdf@bar.com" guest.Email = "asdf@bar.com"
_, err := th.App.UpdateUser(guest, false) _, err := th.App.UpdateUser(th.Context, guest, false)
require.NotNil(t, err) require.NotNil(t, err)
guest.Email = "asdf@foo.com" guest.Email = "asdf@foo.com"
updatedGuest, err := th.App.UpdateUser(guest, false) updatedGuest, err := th.App.UpdateUser(th.Context, guest, false)
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, guest.Email, updatedGuest.Email) require.Equal(t, guest.Email, updatedGuest.Email)
}) })
@@ -189,7 +189,7 @@ func TestUpdateUser(t *testing.T) {
t.Run("fails if the username matches a group name", func(t *testing.T) { t.Run("fails if the username matches a group name", func(t *testing.T) {
user.Username = *group.Name user.Username = *group.Name
u, err := th.App.UpdateUser(user, false) u, err := th.App.UpdateUser(th.Context, user, false)
require.NotNil(t, err) require.NotNil(t, err)
require.Equal(t, "app.user.group_name_conflict", err.Id) require.Equal(t, "app.user.group_name_conflict", err.Id)
require.Nil(t, u) require.Nil(t, u)
@@ -215,7 +215,7 @@ func TestUpdateUserMissingFields(t *testing.T) {
for name, tc := range tests { for name, tc := range tests {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
_, err := th.App.UpdateUser(tc.input, false) _, err := th.App.UpdateUser(th.Context, tc.input, false)
if name == "no missing fields" { if name == "no missing fields" {
assert.Nil(t, err) assert.Nil(t, err)
@@ -517,7 +517,7 @@ func TestUpdateUserEmail(t *testing.T) {
newEmail := th.MakeEmail() newEmail := th.MakeEmail()
user.Email = newEmail user.Email = newEmail
user2, appErr := th.App.UpdateUser(user, false) user2, appErr := th.App.UpdateUser(th.Context, user, false)
assert.Nil(t, appErr) assert.Nil(t, appErr)
assert.Equal(t, currentEmail, user2.Email) assert.Equal(t, currentEmail, user2.Email)
assert.True(t, user2.EmailVerified) assert.True(t, user2.EmailVerified)
@@ -525,7 +525,7 @@ func TestUpdateUserEmail(t *testing.T) {
token, err := th.App.Srv().EmailService.CreateVerifyEmailToken(user2.Id, newEmail) token, err := th.App.Srv().EmailService.CreateVerifyEmailToken(user2.Id, newEmail)
assert.NoError(t, err) assert.NoError(t, err)
appErr = th.App.VerifyEmailFromToken(token.Token) appErr = th.App.VerifyEmailFromToken(th.Context, token.Token)
assert.Nil(t, appErr) assert.Nil(t, appErr)
user2, appErr = th.App.GetUser(user2.Id) user2, appErr = th.App.GetUser(user2.Id)
@@ -544,7 +544,7 @@ func TestUpdateUserEmail(t *testing.T) {
newBotEmail := th.MakeEmail() newBotEmail := th.MakeEmail()
botuser.Email = newBotEmail botuser.Email = newBotEmail
botuser2, appErr := th.App.UpdateUser(&botuser, false) botuser2, appErr := th.App.UpdateUser(th.Context, &botuser, false)
assert.Nil(t, appErr) assert.Nil(t, appErr)
assert.Equal(t, botuser2.Email, newBotEmail) assert.Equal(t, botuser2.Email, newBotEmail)
@@ -559,7 +559,7 @@ func TestUpdateUserEmail(t *testing.T) {
newEmail := user2.Email newEmail := user2.Email
user.Email = newEmail user.Email = newEmail
user3, err := th.App.UpdateUser(user, false) user3, err := th.App.UpdateUser(th.Context, user, false)
require.NotNil(t, err) require.NotNil(t, err)
assert.Equal(t, err.Id, "app.user.save.email_exists.app_error") assert.Equal(t, err.Id, "app.user.save.email_exists.app_error")
assert.Nil(t, user3) assert.Nil(t, user3)
@@ -573,7 +573,7 @@ func TestUpdateUserEmail(t *testing.T) {
newEmail := th.MakeEmail() newEmail := th.MakeEmail()
user.Email = newEmail user.Email = newEmail
user2, err := th.App.UpdateUser(user, false) user2, err := th.App.UpdateUser(th.Context, user, false)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, newEmail, user2.Email) assert.Equal(t, newEmail, user2.Email)
@@ -588,7 +588,7 @@ func TestUpdateUserEmail(t *testing.T) {
newBotEmail := th.MakeEmail() newBotEmail := th.MakeEmail()
botuser.Email = newBotEmail botuser.Email = newBotEmail
botuser2, err := th.App.UpdateUser(&botuser, false) botuser2, err := th.App.UpdateUser(th.Context, &botuser, false)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, botuser2.Email, newBotEmail) assert.Equal(t, botuser2.Email, newBotEmail)
}) })
@@ -602,7 +602,7 @@ func TestUpdateUserEmail(t *testing.T) {
newEmail := user2.Email newEmail := user2.Email
user.Email = newEmail user.Email = newEmail
user3, err := th.App.UpdateUser(user, false) user3, err := th.App.UpdateUser(th.Context, user, false)
require.NotNil(t, err) require.NotNil(t, err)
assert.Equal(t, err.Id, "app.user.save.email_exists.app_error") assert.Equal(t, err.Id, "app.user.save.email_exists.app_error")
assert.Nil(t, user3) assert.Nil(t, user3)
@@ -616,7 +616,7 @@ func TestUpdateUserEmail(t *testing.T) {
// we update the email a first time and update. The first // we update the email a first time and update. The first
// token is sent with the email // token is sent with the email
user.Email = th.MakeEmail() user.Email = th.MakeEmail()
_, appErr := th.App.UpdateUser(user, true) _, appErr := th.App.UpdateUser(th.Context, user, true)
require.Nil(t, appErr) require.Nil(t, appErr)
tokens := []*model.Token{} tokens := []*model.Token{}
@@ -632,7 +632,7 @@ func TestUpdateUserEmail(t *testing.T) {
// time and another token gets sent. The first one should not // time and another token gets sent. The first one should not
// work anymore and the second should work properly // work anymore and the second should work properly
user.Email = th.MakeEmail() user.Email = th.MakeEmail()
_, appErr = th.App.UpdateUser(user, true) _, appErr = th.App.UpdateUser(th.Context, user, true)
require.Nil(t, appErr) require.Nil(t, appErr)
require.Eventually(t, func() bool { require.Eventually(t, func() bool {
@@ -649,9 +649,9 @@ func TestUpdateUserEmail(t *testing.T) {
_, err := th.App.Srv().Store.Token().GetByToken(firstToken.Token) _, err := th.App.Srv().Store.Token().GetByToken(firstToken.Token)
require.Error(t, err) require.Error(t, err)
require.NotNil(t, th.App.VerifyEmailFromToken(firstToken.Token)) require.NotNil(t, th.App.VerifyEmailFromToken(th.Context, firstToken.Token))
require.Nil(t, th.App.VerifyEmailFromToken(secondToken.Token)) require.Nil(t, th.App.VerifyEmailFromToken(th.Context, secondToken.Token))
require.NotNil(t, th.App.VerifyEmailFromToken(firstToken.Token)) require.NotNil(t, th.App.VerifyEmailFromToken(th.Context, firstToken.Token))
}) })
} }
@@ -1096,7 +1096,7 @@ func TestPasswordRecovery(t *testing.T) {
assert.Equal(t, th.BasicUser.Id, tokenData.UserId) assert.Equal(t, th.BasicUser.Id, tokenData.UserId)
assert.Equal(t, th.BasicUser.Email, tokenData.Email) assert.Equal(t, th.BasicUser.Email, tokenData.Email)
err = th.App.ResetPasswordFromToken(token.Token, "abcdefgh") err = th.App.ResetPasswordFromToken(th.Context, token.Token, "abcdefgh")
assert.Nil(t, err) assert.Nil(t, err)
}) })
@@ -1109,10 +1109,10 @@ func TestPasswordRecovery(t *testing.T) {
}) })
th.BasicUser.Email = th.MakeEmail() th.BasicUser.Email = th.MakeEmail()
_, err = th.App.UpdateUser(th.BasicUser, false) _, err = th.App.UpdateUser(th.Context, th.BasicUser, false)
assert.Nil(t, err) assert.Nil(t, err)
err = th.App.ResetPasswordFromToken(token.Token, "abcdefgh") err = th.App.ResetPasswordFromToken(th.Context, token.Token, "abcdefgh")
assert.NotNil(t, err) assert.NotNil(t, err)
}) })
@@ -1120,7 +1120,7 @@ func TestPasswordRecovery(t *testing.T) {
token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email)
assert.Nil(t, err) assert.Nil(t, err)
err = th.App.resetPasswordFromToken(token.Token, "abcdefgh", model.GetMillis()) err = th.App.resetPasswordFromToken(th.Context, token.Token, "abcdefgh", model.GetMillis())
assert.Nil(t, err) assert.Nil(t, err)
}) })
@@ -1128,7 +1128,7 @@ func TestPasswordRecovery(t *testing.T) {
token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email)
assert.Nil(t, err) assert.Nil(t, err)
err = th.App.resetPasswordFromToken(token.Token, "abcdefgh", model.GetMillisForTime(time.Now().Add(25*time.Hour))) err = th.App.resetPasswordFromToken(th.Context, token.Token, "abcdefgh", model.GetMillisForTime(time.Now().Add(25*time.Hour)))
assert.NotNil(t, err) assert.NotNil(t, err)
}) })
@@ -1604,12 +1604,12 @@ func TestUpdateUserRolesWithUser(t *testing.T) {
assert.Equal(t, user.Roles, model.SystemUserRoleId) assert.Equal(t, user.Roles, model.SystemUserRoleId)
// Upgrade to sysadmin. // Upgrade to sysadmin.
user, err := th.App.UpdateUserRolesWithUser(user, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false) user, err := th.App.UpdateUserRolesWithUser(th.Context, user, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
require.Nil(t, err) require.Nil(t, err)
assert.Equal(t, user.Roles, model.SystemUserRoleId+" "+model.SystemAdminRoleId) assert.Equal(t, user.Roles, model.SystemUserRoleId+" "+model.SystemAdminRoleId)
// Test bad role. // Test bad role.
_, err = th.App.UpdateUserRolesWithUser(user, "does not exist", false) _, err = th.App.UpdateUserRolesWithUser(th.Context, user, "does not exist", false)
require.NotNil(t, err) require.NotNil(t, err)
} }
@@ -1636,7 +1636,7 @@ func TestPatchUser(t *testing.T) {
defer th.App.PermanentDeleteUser(th.Context, testUser) defer th.App.PermanentDeleteUser(th.Context, testUser)
t.Run("Patch with a username already exists", func(t *testing.T) { t.Run("Patch with a username already exists", func(t *testing.T) {
_, err := th.App.PatchUser(testUser.Id, &model.UserPatch{ _, err := th.App.PatchUser(th.Context, testUser.Id, &model.UserPatch{
Username: model.NewString(th.BasicUser.Username), Username: model.NewString(th.BasicUser.Username),
}, true) }, true)
@@ -1645,7 +1645,7 @@ func TestPatchUser(t *testing.T) {
}) })
t.Run("Patch with a email already exists", func(t *testing.T) { t.Run("Patch with a email already exists", func(t *testing.T) {
_, err := th.App.PatchUser(testUser.Id, &model.UserPatch{ _, err := th.App.PatchUser(th.Context, testUser.Id, &model.UserPatch{
Email: model.NewString(th.BasicUser.Email), Email: model.NewString(th.BasicUser.Email),
}, true) }, true)
@@ -1654,7 +1654,7 @@ func TestPatchUser(t *testing.T) {
}) })
t.Run("Patch username with a new username", func(t *testing.T) { t.Run("Patch username with a new username", func(t *testing.T) {
_, err := th.App.PatchUser(testUser.Id, &model.UserPatch{ _, err := th.App.PatchUser(th.Context, testUser.Id, &model.UserPatch{
Username: model.NewString(model.NewId()), Username: model.NewString(model.NewId()),
}, true) }, true)

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

@@ -20,23 +20,23 @@ func TestRestrictedViewMembers(t *testing.T) {
user1 := th.CreateUser() user1 := th.CreateUser()
user1.Nickname = "test user1" user1.Nickname = "test user1"
user1.Username = "test-user-1" user1.Username = "test-user-1"
th.App.UpdateUser(user1, false) th.App.UpdateUser(th.Context, user1, false)
user2 := th.CreateUser() user2 := th.CreateUser()
user2.Username = "test-user-2" user2.Username = "test-user-2"
user2.Nickname = "test user2" user2.Nickname = "test user2"
th.App.UpdateUser(user2, false) th.App.UpdateUser(th.Context, user2, false)
user3 := th.CreateUser() user3 := th.CreateUser()
user3.Username = "test-user-3" user3.Username = "test-user-3"
user3.Nickname = "test user3" user3.Nickname = "test user3"
th.App.UpdateUser(user3, false) th.App.UpdateUser(th.Context, user3, false)
user4 := th.CreateUser() user4 := th.CreateUser()
user4.Username = "test-user-4" user4.Username = "test-user-4"
user4.Nickname = "test user4" user4.Nickname = "test user4"
th.App.UpdateUser(user4, false) th.App.UpdateUser(th.Context, user4, false)
user5 := th.CreateUser() user5 := th.CreateUser()
user5.Username = "test-user-5" user5.Username = "test-user-5"
user5.Nickname = "test user5" user5.Nickname = "test user5"
th.App.UpdateUser(user5, false) th.App.UpdateUser(th.Context, user5, false)
// user1 is member of all the channels and teams because is the creator // user1 is member of all the channels and teams because is the creator
th.BasicUser = user1 th.BasicUser = user1

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

@@ -23,7 +23,7 @@ type LdapInterface interface {
GetGroup(groupUID string) (*model.Group, *model.AppError) GetGroup(groupUID string) (*model.Group, *model.AppError)
GetAllGroupsPage(page int, perPage int, opts model.LdapGroupSearchOpts) ([]*model.Group, int, *model.AppError) GetAllGroupsPage(page int, perPage int, opts model.LdapGroupSearchOpts) ([]*model.Group, int, *model.AppError)
FirstLoginSync(c *request.Context, user *model.User, userAuthService, userAuthData, email string) *model.AppError FirstLoginSync(c *request.Context, user *model.User, userAuthService, userAuthData, email string) *model.AppError
UpdateProfilePictureIfNecessary(model.User, model.Session) UpdateProfilePictureIfNecessary(request.CTX, model.User, model.Session)
GetADLdapIdFromSAMLId(authData string) string GetADLdapIdFromSAMLId(authData string) string
GetSAMLIdFromADLdapId(authData string) string GetSAMLIdFromADLdapId(authData string) string
GetVendorNameAndVendorVersion() (string, string) GetVendorNameAndVendorVersion() (string, string)

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

@@ -354,7 +354,7 @@ func (_m *LdapInterface) SwitchToLdap(userID string, ldapID string, ldapPassword
return r0 return r0
} }
// UpdateProfilePictureIfNecessary provides a mock function with given fields: _a0, _a1 // UpdateProfilePictureIfNecessary provides a mock function with given fields: _a0, _a1, _a2
func (_m *LdapInterface) UpdateProfilePictureIfNecessary(_a0 model.User, _a1 model.Session) { func (_m *LdapInterface) UpdateProfilePictureIfNecessary(_a0 request.CTX, _a1 model.User, _a2 model.Session) {
_m.Called(_a0, _a1) _m.Called(_a0, _a1, _a2)
} }

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

@@ -1857,10 +1857,6 @@
"id": "api.file.upload_file.incorrect_number_of_client_ids.app_error", "id": "api.file.upload_file.incorrect_number_of_client_ids.app_error",
"translation": "Unable to upload file(s). Have {{.NumClientIds}} client_ids for {{.NumFiles}} files." "translation": "Unable to upload file(s). Have {{.NumClientIds}} client_ids for {{.NumFiles}} files."
}, },
{
"id": "api.file.upload_file.incorrect_number_of_files.app_error",
"translation": "Unable to upload files. Incorrect number of files specified."
},
{ {
"id": "api.file.upload_file.large_image.app_error", "id": "api.file.upload_file.large_image.app_error",
"translation": "File above maximum dimensions could not be uploaded: {{.Filename}}" "translation": "File above maximum dimensions could not be uploaded: {{.Filename}}"
@@ -2237,6 +2233,10 @@
"id": "api.post.check_for_out_of_channel_mentions.message.one", "id": "api.post.check_for_out_of_channel_mentions.message.one",
"translation": "@{{.Username}} did not get notified by this mention because they are not in the channel." "translation": "@{{.Username}} did not get notified by this mention because they are not in the channel."
}, },
{
"id": "api.post.compliance_enabled.join_channel_to_view_post",
"translation": "Due to compliance rules configured on this instance the channel must be joined before its posts can be read."
},
{ {
"id": "api.post.create_post.can_not_post_to_deleted.error", "id": "api.post.create_post.can_not_post_to_deleted.error",
"translation": "Can not post to deleted channel." "translation": "Can not post to deleted channel."
@@ -5917,7 +5917,7 @@
}, },
{ {
"id": "app.post_reminder_dm", "id": "app.post_reminder_dm",
"translation": "Hi there, you asked me to remind you about {{.SiteURL}}/{{.TeamName}}/pl/{{.PostId}} by @{{.Username}}" "translation": "Hi there, here's your reminder about this message from @{{.Username}}: {{.SiteURL}}/{{.TeamName}}/pl/{{.PostId}}"
}, },
{ {
"id": "app.preference.delete.app_error", "id": "app.preference.delete.app_error",

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

@@ -105,6 +105,10 @@ type ValidateBusinessEmailRequest struct {
Email string `json:"email"` Email string `json:"email"`
} }
type ValidateBusinessEmailResponse struct {
IsValid bool `json:"is_valid"`
}
// CloudCustomerInfo represents editable info of a customer. // CloudCustomerInfo represents editable info of a customer.
type CloudCustomerInfo struct { type CloudCustomerInfo struct {
Name string `json:"name"` Name string `json:"name"`

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

@@ -10,7 +10,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"net" "net"
"net/http" "net/http"
"net/mail" "net/mail"
@@ -218,10 +217,32 @@ type AppError struct {
Where string `json:"-"` // The function where it happened in the form of Struct.Func Where string `json:"-"` // The function where it happened in the form of Struct.Func
IsOAuth bool `json:"is_oauth,omitempty"` // Whether the error is OAuth specific IsOAuth bool `json:"is_oauth,omitempty"` // Whether the error is OAuth specific
params map[string]any params map[string]any
wrapped error
} }
func (er *AppError) Error() string { func (er *AppError) Error() string {
return er.Where + ": " + er.Message + ", " + er.DetailedError var sb strings.Builder
// render the error information
sb.WriteString(er.Where)
sb.WriteString(": ")
sb.WriteString(er.Message)
// only render the detailed error when it's present
if er.DetailedError != "" {
sb.WriteString(", ")
sb.WriteString(er.DetailedError)
}
// render all wrapped errors
err := er.wrapped
for err != nil {
sb.WriteString(", ")
sb.WriteString(err.Error())
err = errors.Unwrap(err)
}
return sb.String()
} }
func (er *AppError) Translate(T i18n.TranslateFunc) { func (er *AppError) Translate(T i18n.TranslateFunc) {
@@ -249,10 +270,19 @@ func (er *AppError) ToJSON() string {
return string(b) return string(b)
} }
func (er *AppError) Unwrap() error {
return er.wrapped
}
func (er *AppError) Wrap(err error) *AppError {
er.wrapped = err
return er
}
// AppErrorFromJSON will decode the input and return an AppError // AppErrorFromJSON will decode the input and return an AppError
func AppErrorFromJSON(data io.Reader) *AppError { func AppErrorFromJSON(data io.Reader) *AppError {
str := "" str := ""
bytes, rerr := ioutil.ReadAll(data) bytes, rerr := io.ReadAll(data)
if rerr != nil { if rerr != nil {
str = rerr.Error() str = rerr.Error()
} else { } else {
@@ -269,14 +299,15 @@ func AppErrorFromJSON(data io.Reader) *AppError {
} }
func NewAppError(where string, id string, params map[string]any, details string, status int) *AppError { func NewAppError(where string, id string, params map[string]any, details string, status int) *AppError {
ap := &AppError{} ap := &AppError{
ap.Id = id Id: id,
ap.params = params params: params,
ap.Message = id Message: id,
ap.Where = where Where: where,
ap.DetailedError = details DetailedError: details,
ap.StatusCode = status StatusCode: status,
ap.IsOAuth = false IsOAuth: false,
}
ap.Translate(translateFunc) ap.Translate(translateFunc)
return ap return ap
} }

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

@@ -85,6 +85,33 @@ func TestAppErrorJunk(t *testing.T) {
require.Equal(t, "body: <html><body>This is a broken test</body></html>", rerr.DetailedError) require.Equal(t, "body: <html><body>This is a broken test</body></html>", rerr.DetailedError)
} }
func TestAppErrorRender(t *testing.T) {
t.Run("Minimal", func(t *testing.T) {
aerr := NewAppError("here", "message", nil, "", http.StatusTeapot)
assert.EqualError(t, aerr, "here: message")
})
t.Run("Detailed", func(t *testing.T) {
aerr := NewAppError("here", "message", nil, "details", http.StatusTeapot)
assert.EqualError(t, aerr, "here: message, details")
})
t.Run("Wrapped", func(t *testing.T) {
aerr := NewAppError("here", "message", nil, "", http.StatusTeapot).Wrap(fmt.Errorf("my error"))
assert.EqualError(t, aerr, "here: message, my error")
})
t.Run("WrappedMultiple", func(t *testing.T) {
aerr := NewAppError("here", "message", nil, "", http.StatusTeapot).Wrap(fmt.Errorf("my error (%w)", fmt.Errorf("inner error")))
assert.EqualError(t, aerr, "here: message, my error (inner error), inner error")
})
t.Run("DetailedWrappedMultiple", func(t *testing.T) {
aerr := NewAppError("here", "message", nil, "details", http.StatusTeapot).Wrap(fmt.Errorf("my error (%w)", fmt.Errorf("inner error")))
assert.EqualError(t, aerr, "here: message, details, my error (inner error), inner error")
})
}
func TestCopyStringMap(t *testing.T) { func TestCopyStringMap(t *testing.T) {
itemKey := "item1" itemKey := "item1"
originalMap := make(map[string]string) originalMap := make(map[string]string)

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

@@ -80,7 +80,7 @@ type LicenseService interface {
// The service shall be registered via app.UserKey service key. // The service shall be registered via app.UserKey service key.
type UserService interface { type UserService interface {
GetUser(userID string) (*model.User, *model.AppError) GetUser(userID string) (*model.User, *model.AppError)
UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError) UpdateUser(c request.CTX, user *model.User, sendNotifications bool) (*model.User, *model.AppError)
GetUserByEmail(email string) (*model.User, *model.AppError) GetUserByEmail(email string) (*model.User, *model.AppError)
GetUserByUsername(username string) (*model.User, *model.AppError) GetUserByUsername(username string) (*model.User, *model.AppError)
GetUsersFromProfiles(options *model.UserGetOptions) ([]*model.User, *model.AppError) GetUsersFromProfiles(options *model.UserGetOptions) ([]*model.User, *model.AppError)

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

@@ -4,6 +4,7 @@
package filestore package filestore
import ( import (
"bytes"
"context" "context"
"crypto/tls" "crypto/tls"
"io" "io"
@@ -365,7 +366,13 @@ func (b *S3FileBackend) WriteFile(fr io.Reader, path string) (int64, error) {
ctx, cancel := context.WithTimeout(context.Background(), b.timeout) ctx, cancel := context.WithTimeout(context.Background(), b.timeout)
defer cancel() defer cancel()
options := s3PutOptions(b.encrypt, contentType) options := s3PutOptions(b.encrypt, contentType)
info, err := b.client.PutObject(ctx, b.bucket, path, fr, -1, options)
objSize := -1
if buf, ok := fr.(*bytes.Buffer); ok {
objSize = buf.Len()
}
info, err := b.client.PutObject(ctx, b.bucket, path, fr, int64(objSize), options)
if err != nil { if err != nil {
return info.Size, errors.Wrapf(err, "unable write the data in the file %s", path) return info.Size, errors.Wrapf(err, "unable write the data in the file %s", path)
} }
@@ -393,7 +400,11 @@ func (b *S3FileBackend) AppendFile(fr io.Reader, path string) (int64, error) {
partName := fp + ".part" partName := fp + ".part"
ctx2, cancel2 := context.WithTimeout(context.Background(), b.timeout) ctx2, cancel2 := context.WithTimeout(context.Background(), b.timeout)
defer cancel2() defer cancel2()
info, err := b.client.PutObject(ctx2, b.bucket, partName, fr, -1, options) objSize := -1
if buf, ok := fr.(*bytes.Buffer); ok {
objSize = buf.Len()
}
info, err := b.client.PutObject(ctx2, b.bucket, partName, fr, int64(objSize), options)
if err != nil { if err != nil {
return 0, errors.Wrapf(err, "unable append the data in the file %s", path) return 0, errors.Wrapf(err, "unable append the data in the file %s", path)
} }

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

@@ -74,11 +74,8 @@ func GetMailBox(email string) (results JSONMessageHeaderInbucket, err error) {
var record JSONMessageHeaderInbucket var record JSONMessageHeaderInbucket
err = json.NewDecoder(resp.Body).Decode(&record) err = json.NewDecoder(resp.Body).Decode(&record)
switch { if err != nil {
case err == io.EOF: return nil, fmt.Errorf("error: %w", err)
return nil, fmt.Errorf("error: %s", err)
case err != nil:
return nil, fmt.Errorf("error: %s", err)
} }
if len(record) == 0 { if len(record) == 0 {
return nil, fmt.Errorf("no mailbox") return nil, fmt.Errorf("no mailbox")

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

@@ -1385,7 +1385,7 @@ func testTeamSaveMember(t *testing.T, ss store.Store) {
member := &model.TeamMember{TeamId: "wrong", UserId: u1.Id} member := &model.TeamMember{TeamId: "wrong", UserId: u1.Id}
_, nErr := ss.Team().SaveMember(member, -1) _, nErr := ss.Team().SaveMember(member, -1)
require.Error(t, nErr) require.Error(t, nErr)
require.Equal(t, "TeamMember.IsValid: model.team_member.is_valid.team_id.app_error, ", nErr.Error()) require.Equal(t, "TeamMember.IsValid: model.team_member.is_valid.team_id.app_error", nErr.Error())
}) })
t.Run("too many members", func(t *testing.T) { t.Run("too many members", func(t *testing.T) {
@@ -1726,7 +1726,7 @@ func testTeamSaveMultipleMembers(t *testing.T, ss store.Store) {
m2 := &model.TeamMember{TeamId: model.NewId(), UserId: u2.Id} m2 := &model.TeamMember{TeamId: model.NewId(), UserId: u2.Id}
_, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, -1) _, nErr := ss.Team().SaveMultipleMembers([]*model.TeamMember{m1, m2}, -1)
require.Error(t, nErr) require.Error(t, nErr)
require.Equal(t, "TeamMember.IsValid: model.team_member.is_valid.team_id.app_error, ", nErr.Error()) require.Equal(t, "TeamMember.IsValid: model.team_member.is_valid.team_id.app_error", nErr.Error())
}) })
t.Run("too many members in one team", func(t *testing.T) { t.Run("too many members in one team", func(t *testing.T) {

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

@@ -20,6 +20,7 @@ func AssertLog(t *testing.T, logs io.Reader, level, message string) {
if err := dec.Decode(&log); err == io.EOF { if err := dec.Decode(&log); err == io.EOF {
break break
} else if err != nil { } else if err != nil {
t.Logf("Error decoding log entry: %s", err)
continue continue
} }
@@ -42,6 +43,7 @@ func AssertNoLog(t *testing.T, logs io.Reader, level, message string) {
if err := dec.Decode(&log); err == io.EOF { if err := dec.Decode(&log); err == io.EOF {
break break
} else if err != nil { } else if err != nil {
t.Logf("Error decoding log entry: %s", err)
continue continue
} }

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

@@ -221,6 +221,10 @@ func (c *Context) SetInvalidParam(parameter string) {
c.Err = NewInvalidParamError(parameter) c.Err = NewInvalidParamError(parameter)
} }
func (c *Context) SetInvalidParamWithErr(parameter string, err error) {
c.Err = NewInvalidParamError(parameter).Wrap(err)
}
func (c *Context) SetInvalidURLParam(parameter string) { func (c *Context) SetInvalidURLParam(parameter string) {
c.Err = NewInvalidURLParamError(parameter) c.Err = NewInvalidURLParamError(parameter)
} }
@@ -269,10 +273,12 @@ func NewInvalidParamError(parameter string) *model.AppError {
err := model.NewAppError("Context", "api.context.invalid_body_param.app_error", map[string]any{"Name": parameter}, "", http.StatusBadRequest) err := model.NewAppError("Context", "api.context.invalid_body_param.app_error", map[string]any{"Name": parameter}, "", http.StatusBadRequest)
return err return err
} }
func NewInvalidURLParamError(parameter string) *model.AppError { func NewInvalidURLParamError(parameter string) *model.AppError {
err := model.NewAppError("Context", "api.context.invalid_url_param.app_error", map[string]any{"Name": parameter}, "", http.StatusBadRequest) err := model.NewAppError("Context", "api.context.invalid_url_param.app_error", map[string]any{"Name": parameter}, "", http.StatusBadRequest)
return err return err
} }
func NewServerBusyError() *model.AppError { func NewServerBusyError() *model.AppError {
err := model.NewAppError("Context", "api.context.server_busy.app_error", nil, "", http.StatusServiceUnavailable) err := model.NewAppError("Context", "api.context.server_busy.app_error", nil, "", http.StatusServiceUnavailable)
return err return err