mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
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:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user