Fix error message when sharing already shared channel; also make idempotent (#25854)

* fix appError/error assignment bug

* make ShareChannel plugin API idempotent

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
Doug Lauder
2024-01-09 06:42:11 -05:00
committed by GitHub
parent 241e8edc2e
commit 93351ff8a4
2 changed files with 13 additions and 9 deletions

View File

@@ -6,6 +6,7 @@ package app
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
@@ -1298,7 +1299,12 @@ func (api *PluginAPI) UnregisterPluginForSharedChannels(pluginID string) error {
}
func (api *PluginAPI) ShareChannel(sc *model.SharedChannel) (*model.SharedChannel, error) {
return api.app.ShareChannel(api.ctx, sc)
scShared, err := api.app.ShareChannel(api.ctx, sc)
if errors.Is(err, ErrChannelAlreadyShared) {
// sharing an already shared channel is not an error; treat as idempotent and return the existing shared channel
return api.app.GetSharedChannel(sc.ChannelId)
}
return scShared, err
}
func (api *PluginAPI) UpdateSharedChannel(sc *model.SharedChannel) (*model.SharedChannel, error) {

View File

@@ -15,23 +15,21 @@ import (
)
var (
errNotFound = errors.New("not found")
errNotFound = errors.New("not found")
ErrChannelAlreadyShared = errors.New("channel is already shared")
)
func (a *App) checkChannelNotShared(c request.CTX, channelId string) error {
// check that channel exists.
if _, err := a.GetChannel(c, channelId); err != nil {
return fmt.Errorf("cannot share this channel: %w", err)
if _, appErr := a.GetChannel(c, channelId); appErr != nil {
return fmt.Errorf("cannot find channel: %w", appErr)
}
// Check channel is not already shared.
if _, err := a.GetSharedChannel(channelId); err == nil {
var errNotFound *store.ErrNotFound
if errors.As(err, &errNotFound) {
return fmt.Errorf("channel is already shared: %w", err)
}
return fmt.Errorf("cannot find channel: %w", err)
return ErrChannelAlreadyShared
}
return nil
}