From 0291730c2f2841e8181a2284f852a58294b28c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 29 Aug 2018 15:07:37 +0200 Subject: MM-11270: Forbid react/de-react in archived channels (#9323) --- app/reaction.go | 83 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 39 deletions(-) (limited to 'app/reaction.go') diff --git a/app/reaction.go b/app/reaction.go index 082d28f0d..41fc7fca4 100644 --- a/app/reaction.go +++ b/app/reaction.go @@ -15,43 +15,46 @@ func (a *App) SaveReactionForPost(reaction *model.Reaction) (*model.Reaction, *m return nil, err } - if a.License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly { - var channel *model.Channel - if channel, err = a.GetChannel(post.ChannelId); err != nil { + channel, err := a.GetChannel(post.ChannelId) + if err != nil { + return nil, err + } + + if channel.DeleteAt > 0 { + return nil, model.NewAppError("deleteReactionForPost", "api.reaction.save.archived_channel.app_error", nil, "", http.StatusForbidden) + } + + if a.License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly && channel.Name == model.DEFAULT_CHANNEL { + user, err := a.GetUser(reaction.UserId) + if err != nil { return nil, err } - if channel.Name == model.DEFAULT_CHANNEL { - var user *model.User - if user, err = a.GetUser(reaction.UserId); err != nil { - return nil, err - } - - if !a.RolesGrantPermission(user.GetRoles(), model.PERMISSION_MANAGE_SYSTEM.Id) { - return nil, model.NewAppError("saveReactionForPost", "api.reaction.town_square_read_only", nil, "", http.StatusForbidden) - } + if !a.RolesGrantPermission(user.GetRoles(), model.PERMISSION_MANAGE_SYSTEM.Id) { + return nil, model.NewAppError("saveReactionForPost", "api.reaction.town_square_read_only", nil, "", http.StatusForbidden) } } - if result := <-a.Srv.Store.Reaction().Save(reaction); result.Err != nil { + result := <-a.Srv.Store.Reaction().Save(reaction) + if result.Err != nil { return nil, result.Err - } else { - reaction = result.Data.(*model.Reaction) + } - a.Go(func() { - a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_ADDED, reaction, post, true) - }) + reaction = result.Data.(*model.Reaction) - return reaction, nil - } + a.Go(func() { + a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_ADDED, reaction, post, true) + }) + + return reaction, nil } func (a *App) GetReactionsForPost(postId string) ([]*model.Reaction, *model.AppError) { - if result := <-a.Srv.Store.Reaction().GetForPost(postId, true); result.Err != nil { + result := <-a.Srv.Store.Reaction().GetForPost(postId, true) + if result.Err != nil { return nil, result.Err - } else { - return result.Data.([]*model.Reaction), nil } + return result.Data.([]*model.Reaction), nil } func (a *App) DeleteReactionForPost(reaction *model.Reaction) *model.AppError { @@ -60,21 +63,23 @@ func (a *App) DeleteReactionForPost(reaction *model.Reaction) *model.AppError { return err } - if a.License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly { - var channel *model.Channel - if channel, err = a.GetChannel(post.ChannelId); err != nil { + channel, err := a.GetChannel(post.ChannelId) + if err != nil { + return err + } + + if channel.DeleteAt > 0 { + return model.NewAppError("deleteReactionForPost", "api.reaction.delete.archived_channel.app_error", nil, "", http.StatusForbidden) + } + + if a.License() != nil && *a.Config().TeamSettings.ExperimentalTownSquareIsReadOnly && channel.Name == model.DEFAULT_CHANNEL { + user, err := a.GetUser(reaction.UserId) + if err != nil { return err } - if channel.Name == model.DEFAULT_CHANNEL { - var user *model.User - if user, err = a.GetUser(reaction.UserId); err != nil { - return err - } - - if !a.RolesGrantPermission(user.GetRoles(), model.PERMISSION_MANAGE_SYSTEM.Id) { - return model.NewAppError("deleteReactionForPost", "api.reaction.town_square_read_only", nil, "", http.StatusForbidden) - } + if !a.RolesGrantPermission(user.GetRoles(), model.PERMISSION_MANAGE_SYSTEM.Id) { + return model.NewAppError("deleteReactionForPost", "api.reaction.town_square_read_only", nil, "", http.StatusForbidden) } } @@ -85,12 +90,12 @@ func (a *App) DeleteReactionForPost(reaction *model.Reaction) *model.AppError { if result := <-a.Srv.Store.Reaction().Delete(reaction); result.Err != nil { return result.Err - } else { - a.Go(func() { - a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_REMOVED, reaction, post, hasReactions) - }) } + a.Go(func() { + a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_REMOVED, reaction, post, hasReactions) + }) + return nil } -- cgit v1.2.3-1-g7c22