Adds Shared Channel related API endpoints (#27436)
* Adds Shared Channel management API endpoints
New endpoints for the following routes are added:
- Get Shared Channel Remotes by Remote Cluster at `GET
/api/v4/remotecluster/{remote_id}/sharedchannelremotes`
- Invite Remote Cluster to Channel at `POST
/api/v4/remotecluster/{remote_id}/channels/invite`
- Uninvite Remote Cluster to Channel at `POST
/api/v4/remotecluster/{remote_id}/channels/uninvite`
These endpoints are planned to be used from the system console, and
gated through the `manage_secure_connections` permission.
* Adds i18n messages for API errors
* Fix pagination flaky test
* Fix linter
* Adds the posibility of filtering shared channel remotes by home
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
60ffd00d30
Коммит
3dc0e63c03
@@ -159,8 +159,10 @@ func (s SqlSharedChannelStore) GetAll(offset, limit int, opts model.SharedChanne
|
||||
return nil, err
|
||||
}
|
||||
|
||||
query := s.getSharedChannelsQuery(opts, false)
|
||||
query = query.OrderBy("sc.ShareDisplayName, sc.ShareName").Limit(safeLimit).Offset(safeOffset)
|
||||
query := s.getSharedChannelsQuery(opts, false).
|
||||
OrderBy("sc.ShareDisplayName, sc.ShareName").
|
||||
Limit(safeLimit).
|
||||
Offset(safeOffset)
|
||||
|
||||
squery, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
@@ -459,25 +461,49 @@ func (s SqlSharedChannelStore) GetRemoteByIds(channelId string, remoteId string)
|
||||
}
|
||||
|
||||
// GetRemotes fetches all shared channel remotes associated with channel_id.
|
||||
func (s SqlSharedChannelStore) GetRemotes(opts model.SharedChannelRemoteFilterOpts) ([]*model.SharedChannelRemote, error) {
|
||||
func (s SqlSharedChannelStore) GetRemotes(offset, limit int, opts model.SharedChannelRemoteFilterOpts) ([]*model.SharedChannelRemote, error) {
|
||||
if opts.ExcludeHome && opts.ExcludeRemote {
|
||||
return nil, errors.New("cannot exclude home and remote shared channel remotes")
|
||||
}
|
||||
|
||||
if offset < 0 {
|
||||
return nil, errors.New("offset must be a positive integer")
|
||||
}
|
||||
if limit < 0 {
|
||||
return nil, errors.New("limit must be a positive integer")
|
||||
}
|
||||
|
||||
remotes := []*model.SharedChannelRemote{}
|
||||
|
||||
query := s.getQueryBuilder().
|
||||
Select(sharedChannelRemoteFields("")...).
|
||||
From("SharedChannelRemotes")
|
||||
Select(sharedChannelRemoteFields("scr")...).
|
||||
From("SharedChannelRemotes scr").
|
||||
OrderBy("scr.Id")
|
||||
|
||||
if opts.ChannelId != "" {
|
||||
query = query.Where(sq.Eq{"ChannelId": opts.ChannelId})
|
||||
query = query.Where(sq.Eq{"scr.ChannelId": opts.ChannelId})
|
||||
}
|
||||
|
||||
if opts.RemoteId != "" {
|
||||
query = query.Where(sq.Eq{"RemoteId": opts.RemoteId})
|
||||
query = query.Where(sq.Eq{"scr.RemoteId": opts.RemoteId})
|
||||
}
|
||||
|
||||
if !opts.InclUnconfirmed {
|
||||
query = query.Where(sq.Eq{"IsInviteConfirmed": true})
|
||||
query = query.Where(sq.Eq{"scr.IsInviteConfirmed": true})
|
||||
}
|
||||
|
||||
if opts.ExcludeHome {
|
||||
query = query.Join("SharedChannels sc ON (scr.ChannelId = sc.ChannelId)").
|
||||
Where(sq.Eq{"sc.Home": false})
|
||||
}
|
||||
|
||||
if opts.ExcludeRemote {
|
||||
query = query.Join("SharedChannels sc ON (scr.ChannelId = sc.ChannelId)").
|
||||
Where(sq.Eq{"sc.Home": true})
|
||||
}
|
||||
|
||||
query = query.Offset(uint64(offset)).Limit(uint64(limit))
|
||||
|
||||
squery, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "get_shared_channel_remotes_tosql")
|
||||
|
||||
Ссылка в новой задаче
Block a user