[MM-56061] Only render where field in model.AppError when it's present (#25648)

* Only render where field in model.AppError when it's present

* Remove trailing comma from permission error
Этот коммит содержится в:
Ben Schumacher
2023-12-11 10:27:51 +01:00
коммит произвёл GitHub
родитель a54f927e3d
Коммит 5b6b425cfc
27 изменённых файлов: 150 добавлений и 106 удалений

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

@@ -634,7 +634,7 @@ func verifyLinkUnlinkPermission(c *Context, syncableType model.GroupSyncableType
switch syncableType {
case model.GroupSyncableTypeTeam:
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), syncableID, model.PermissionManageTeam) {
return c.App.MakePermissionError(c.AppContext.Session(), []*model.Permission{model.PermissionManageTeam})
return model.MakePermissionError(c.AppContext.Session(), []*model.Permission{model.PermissionManageTeam})
}
case model.GroupSyncableTypeChannel:
channel, err := c.App.GetChannel(c.AppContext, syncableID)
@@ -650,7 +650,7 @@ func verifyLinkUnlinkPermission(c *Context, syncableType model.GroupSyncableType
}
if !c.App.SessionHasPermissionToChannel(c.AppContext, *c.AppContext.Session(), syncableID, permission) {
return c.App.MakePermissionError(c.AppContext.Session(), []*model.Permission{permission})
return model.MakePermissionError(c.AppContext.Session(), []*model.Permission{permission})
}
}
@@ -876,7 +876,7 @@ func getGroupsByChannelCommon(c *Context, r *http.Request) ([]byte, *model.AppEr
permission = model.PermissionReadPublicChannelGroups
}
if !c.App.SessionHasPermissionToChannel(c.AppContext, *c.AppContext.Session(), c.Params.ChannelId, permission) {
return nil, c.App.MakePermissionError(c.AppContext.Session(), []*model.Permission{permission})
return nil, model.MakePermissionError(c.AppContext.Session(), []*model.Permission{permission})
}
opts := model.GroupSearchOpts{

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

@@ -33,7 +33,7 @@ func TestNotifyAdmin(t *testing.T) {
})
require.Error(t, err)
require.Equal(t, ": Unable to save notify data.", err.Error())
require.Equal(t, "Unable to save notify data.", err.Error())
require.Equal(t, http.StatusInternalServerError, statusCode)
})
@@ -48,7 +48,7 @@ func TestNotifyAdmin(t *testing.T) {
})
require.Error(t, err)
require.Equal(t, ": Unable to save notify data.", err.Error())
require.Equal(t, "Unable to save notify data.", err.Error())
require.Equal(t, http.StatusInternalServerError, statusCode)
})
@@ -62,7 +62,7 @@ func TestNotifyAdmin(t *testing.T) {
})
require.Error(t, err)
require.Equal(t, ": Unable to save notify data.", err.Error())
require.Equal(t, "Unable to save notify data.", err.Error())
require.Equal(t, http.StatusInternalServerError, statusCode)
})
@@ -77,7 +77,7 @@ func TestNotifyAdmin(t *testing.T) {
})
require.Error(t, err)
require.Equal(t, ": Unable to save notify data.", err.Error())
require.Equal(t, "Unable to save notify data.", err.Error())
require.Equal(t, http.StatusInternalServerError, statusCode)
})
@@ -99,7 +99,7 @@ func TestNotifyAdmin(t *testing.T) {
})
require.Error(t, err)
require.Equal(t, ": Already notified admin", err.Error())
require.Equal(t, "Already notified admin", err.Error())
require.Equal(t, http.StatusForbidden, statusCode)
})
@@ -127,7 +127,7 @@ func TestTriggerNotifyAdmin(t *testing.T) {
statusCode, err := th.SystemAdminClient.TriggerNotifyAdmin(context.Background(), &model.NotifyAdminToUpgradeRequest{})
require.Error(t, err)
require.Equal(t, ": Internal error during cloud api request.", err.Error())
require.Equal(t, "Internal error during cloud api request.", err.Error())
require.Equal(t, http.StatusForbidden, statusCode)
})
@@ -140,7 +140,7 @@ func TestTriggerNotifyAdmin(t *testing.T) {
statusCode, err := th.Client.TriggerNotifyAdmin(context.Background(), &model.NotifyAdminToUpgradeRequest{})
require.Error(t, err)
require.Equal(t, ": You do not have the appropriate permissions.", err.Error())
require.Equal(t, "You do not have the appropriate permissions.", err.Error())
require.Equal(t, http.StatusForbidden, statusCode)
})

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

@@ -1270,7 +1270,7 @@ func TestPatchPost(t *testing.T) {
t.Run("invalid requests", func(t *testing.T) {
r, err := client.DoAPIPut(context.Background(), "/posts/"+post.Id+"/patch", "garbage")
require.EqualError(t, err, ": Invalid or missing post in request body., invalid character 'g' looking for beginning of value")
require.EqualError(t, err, "Invalid or missing post in request body., invalid character 'g' looking for beginning of value")
require.Equal(t, http.StatusBadRequest, r.StatusCode, "wrong status code")
patch := &model.PostPatch{}

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

@@ -947,7 +947,7 @@ func requireGroupAccess(c *web.Context, groupID string) *model.AppError {
if group.Source == model.GroupSourceLdap {
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
return c.App.MakePermissionError(c.AppContext.Session(), []*model.Permission{model.PermissionSysconsoleReadUserManagementGroups})
return model.MakePermissionError(c.AppContext.Session(), []*model.Permission{model.PermissionSysconsoleReadUserManagementGroups})
}
}

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

@@ -2283,7 +2283,7 @@ func TestDeleteBotUser(t *testing.T) {
_, err := th.Client.DeleteUser(context.Background(), bot.UserId)
require.Error(t, err)
require.Equal(t, err.Error(), ": You do not have the appropriate permissions.")
require.Equal(t, err.Error(), "You do not have the appropriate permissions.")
}
func TestPermanentDeleteUser(t *testing.T) {
@@ -2630,16 +2630,16 @@ func TestGetUsers(t *testing.T) {
// Check role params validity
_, _, err = client.GetUsersWithCustomQueryParameters(context.Background(), 0, 5, "in_channel=random_channel_id&channel_roles=random_role_doesnt_exist", "")
require.Error(t, err)
require.Equal(t, err.Error(), ": Invalid or missing channelRoles in request body.")
require.Equal(t, err.Error(), "Invalid or missing channelRoles in request body.")
_, _, err = client.GetUsersWithCustomQueryParameters(context.Background(), 0, 5, "in_team=random_channel_id&team_roles=random_role_doesnt_exist", "")
require.Error(t, err)
require.Equal(t, err.Error(), ": Invalid or missing teamRoles in request body.")
require.Equal(t, err.Error(), "Invalid or missing teamRoles in request body.")
_, _, err = client.GetUsersWithCustomQueryParameters(context.Background(), 0, 5, "roles=random_role_doesnt_exist%2Csystem_user", "")
require.Error(t, err)
require.Equal(t, err.Error(), ": Invalid or missing roles in request body.")
require.Equal(t, err.Error(), "Invalid or missing roles in request body.")
_, _, err = client.GetUsersWithCustomQueryParameters(context.Background(), 0, 5, "role=random_role_doesnt_exist", "")
require.Error(t, err)
require.Equal(t, err.Error(), ": Invalid or missing role in request body.")
require.Equal(t, err.Error(), "Invalid or missing role in request body.")
})
th.Client.Logout(context.Background())

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

@@ -911,7 +911,6 @@ type AppIface interface {
ListTeamCommands(teamID string) ([]*model.Command, *model.AppError)
Log() *mlog.Logger
LoginByOAuth(c request.CTX, service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError)
MakePermissionError(s *model.Session, permissions []*model.Permission) *model.AppError
MarkChannelsAsViewed(c request.CTX, channelIDs []string, userID string, currentSessionId string, collapsedThreadsSupported, isCRTEnabled bool) (map[string]int64, *model.AppError)
MaxPostSize() int
MessageExport() einterfaces.MessageExportInterface

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

@@ -14,15 +14,6 @@ import (
"github.com/mattermost/mattermost/server/public/shared/request"
)
func (a *App) MakePermissionError(s *model.Session, permissions []*model.Permission) *model.AppError {
permissionsStr := "permission="
for _, permission := range permissions {
permissionsStr += permission.Id
permissionsStr += ","
}
return model.NewAppError("Permissions", "api.context.permissions.app_error", nil, "userId="+s.UserId+", "+permissionsStr, http.StatusForbidden)
}
func (a *App) SessionHasPermissionTo(session model.Session, permission *model.Permission) bool {
if session.IsUnrestricted() {
return true
@@ -360,7 +351,7 @@ func (a *App) SessionHasPermissionToManageBot(session model.Session, botUserId s
// the bot doesn't exist at all.
return model.MakeBotNotFoundError("permissions", botUserId)
}
return a.MakePermissionError(&session, []*model.Permission{model.PermissionManageBots})
return model.MakePermissionError(&session, []*model.Permission{model.PermissionManageBots})
}
} else {
if !a.SessionHasPermissionTo(session, model.PermissionManageOthersBots) {
@@ -369,7 +360,7 @@ func (a *App) SessionHasPermissionToManageBot(session model.Session, botUserId s
// pretend as if the bot doesn't exist at all.
return model.MakeBotNotFoundError("permissions", botUserId)
}
return a.MakePermissionError(&session, []*model.Permission{model.PermissionManageOthersBots})
return model.MakePermissionError(&session, []*model.Permission{model.PermissionManageOthersBots})
}
}

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

@@ -12464,28 +12464,6 @@ func (a *OpenTracingAppLayer) MakeAuditRecord(rctx request.CTX, event string, in
return resultVar0
}
func (a *OpenTracingAppLayer) MakePermissionError(s *model.Session, permissions []*model.Permission) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.MakePermissionError")
a.ctx = newCtx
a.app.Srv().Store().SetContext(newCtx)
defer func() {
a.app.Srv().Store().SetContext(origCtx)
a.ctx = origCtx
}()
defer span.Finish()
resultVar0 := a.app.MakePermissionError(s, permissions)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
ext.Error.Set(span, true)
}
return resultVar0
}
func (a *OpenTracingAppLayer) MarkChannelAsUnreadFromPost(c request.CTX, postID string, userID string, collapsedThreadsSupported bool) (*model.ChannelUnreadAt, *model.AppError) {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.MarkChannelAsUnreadFromPost")

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

@@ -2055,10 +2055,10 @@ func (a *App) GetPostIfAuthorized(c request.CTX, postID string, session *model.S
if !a.SessionHasPermissionToChannel(c, *session, channel.Id, model.PermissionReadChannelContent) {
if channel.Type == model.ChannelTypeOpen && !*a.Config().ComplianceSettings.Enable {
if !a.SessionHasPermissionToTeam(*session, channel.TeamId, model.PermissionReadPublicChannel) {
return nil, a.MakePermissionError(session, []*model.Permission{model.PermissionReadPublicChannel})
return nil, model.MakePermissionError(session, []*model.Permission{model.PermissionReadPublicChannel})
}
} else {
return nil, a.MakePermissionError(session, []*model.Permission{model.PermissionReadChannelContent})
return nil, model.MakePermissionError(session, []*model.Permission{model.PermissionReadChannelContent})
}
}

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

@@ -305,7 +305,7 @@ func NewJSONEncodingError(err error) *model.AppError {
}
func (c *Context) SetPermissionError(permissions ...*model.Permission) {
c.Err = c.App.MakePermissionError(c.AppContext.Session(), permissions)
c.Err = model.MakePermissionError(c.AppContext.Session(), permissions)
}
func (c *Context) SetSiteURLHeader(url string) {