Pr 9039 (#9187)
* MM-11065: Allow to search and get archived channels from the API * Fixing more tests * Add some unit tests * Add includeDeleted parameter to session permissions check function * More test fixing * Adding archive channels list in channels search * Add restriction for archived channel edition * Reverting permissions checks modification * Changed the query parameter to include_deleted * Enable search archive channels as true by default * Adding tests for verify search on deleted channels * Allowing to override archive channels during the imports * Fixed test * Search in archive channels from the API must be explicitly requested * Removing includeDeleted parameter from GetChannelByName and GetChannelByNameForTeam * Back to ViewArchivedChannels config * Fixing tests * Reverting GetChannelByName parameter * Add include deleted parameter on GetChannel functions in plugins api * Fixing tests
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
65cd447a61
Коммит
5872bf9c2f
@@ -37,7 +37,7 @@ func (a *App) SessionHasPermissionToChannel(session model.Session, channelId str
|
||||
return false
|
||||
}
|
||||
|
||||
cmc := a.Srv.Store.Channel().GetAllChannelMembersForUser(session.UserId, true)
|
||||
cmc := a.Srv.Store.Channel().GetAllChannelMembersForUser(session.UserId, true, true)
|
||||
|
||||
var channelRoles []string
|
||||
if cmcresult := <-cmc; cmcresult.Err == nil {
|
||||
|
||||
@@ -393,7 +393,7 @@ func (a *App) GetGroupChannel(userIds []string) (*model.Channel, *model.AppError
|
||||
return nil, model.NewAppError("GetGroupChannel", "api.channel.create_group.bad_user.app_error", nil, "user_ids="+model.ArrayToJson(userIds), http.StatusBadRequest)
|
||||
}
|
||||
|
||||
channel, err := a.GetChannelByName(model.GetGroupNameFromUserIds(userIds), "")
|
||||
channel, err := a.GetChannelByName(model.GetGroupNameFromUserIds(userIds), "", true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1011,16 +1011,26 @@ func (a *App) GetChannel(channelId string) (*model.Channel, *model.AppError) {
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) GetChannelByName(channelName, teamId string) (*model.Channel, *model.AppError) {
|
||||
if result := <-a.Srv.Store.Channel().GetByName(teamId, channelName, true); result.Err != nil && result.Err.Id == "store.sql_channel.get_by_name.missing.app_error" {
|
||||
func (a *App) GetChannelByName(channelName, teamId string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
||||
var result store.StoreResult
|
||||
|
||||
if includeDeleted {
|
||||
result = <-a.Srv.Store.Channel().GetByNameIncludeDeleted(teamId, channelName, false)
|
||||
} else {
|
||||
result = <-a.Srv.Store.Channel().GetByName(teamId, channelName, false)
|
||||
}
|
||||
|
||||
if result.Err != nil && result.Err.Id == "store.sql_channel.get_by_name.missing.app_error" {
|
||||
result.Err.StatusCode = http.StatusNotFound
|
||||
return nil, result.Err
|
||||
} else if result.Err != nil {
|
||||
}
|
||||
|
||||
if result.Err != nil {
|
||||
result.Err.StatusCode = http.StatusBadRequest
|
||||
return nil, result.Err
|
||||
} else {
|
||||
return result.Data.(*model.Channel), nil
|
||||
}
|
||||
|
||||
return result.Data.(*model.Channel), nil
|
||||
}
|
||||
|
||||
func (a *App) GetChannelsByNames(channelNames []string, teamId string) ([]*model.Channel, *model.AppError) {
|
||||
@@ -1035,7 +1045,7 @@ func (a *App) GetChannelsByNames(channelNames []string, teamId string) ([]*model
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) GetChannelByNameForTeamName(channelName, teamName string) (*model.Channel, *model.AppError) {
|
||||
func (a *App) GetChannelByNameForTeamName(channelName, teamName string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
||||
var team *model.Team
|
||||
|
||||
if result := <-a.Srv.Store.Team().GetByName(teamName); result.Err != nil {
|
||||
@@ -1045,19 +1055,28 @@ func (a *App) GetChannelByNameForTeamName(channelName, teamName string) (*model.
|
||||
team = result.Data.(*model.Team)
|
||||
}
|
||||
|
||||
if result := <-a.Srv.Store.Channel().GetByName(team.Id, channelName, true); result.Err != nil && result.Err.Id == "store.sql_channel.get_by_name.missing.app_error" {
|
||||
var result store.StoreResult
|
||||
if includeDeleted {
|
||||
result = <-a.Srv.Store.Channel().GetByNameIncludeDeleted(team.Id, channelName, false)
|
||||
} else {
|
||||
result = <-a.Srv.Store.Channel().GetByName(team.Id, channelName, false)
|
||||
}
|
||||
|
||||
if result.Err != nil && result.Err.Id == "store.sql_channel.get_by_name.missing.app_error" {
|
||||
result.Err.StatusCode = http.StatusNotFound
|
||||
return nil, result.Err
|
||||
} else if result.Err != nil {
|
||||
}
|
||||
|
||||
if result.Err != nil {
|
||||
result.Err.StatusCode = http.StatusBadRequest
|
||||
return nil, result.Err
|
||||
} else {
|
||||
return result.Data.(*model.Channel), nil
|
||||
}
|
||||
|
||||
return result.Data.(*model.Channel), nil
|
||||
}
|
||||
|
||||
func (a *App) GetChannelsForUser(teamId string, userId string) (*model.ChannelList, *model.AppError) {
|
||||
if result := <-a.Srv.Store.Channel().GetChannels(teamId, userId); result.Err != nil {
|
||||
func (a *App) GetChannelsForUser(teamId string, userId string, includeDeleted bool) (*model.ChannelList, *model.AppError) {
|
||||
if result := <-a.Srv.Store.Channel().GetChannels(teamId, userId, includeDeleted); result.Err != nil {
|
||||
return nil, result.Err
|
||||
} else {
|
||||
return result.Data.(*model.ChannelList), nil
|
||||
@@ -1494,7 +1513,9 @@ func (a *App) UpdateChannelLastViewedAt(channelIds []string, userId string) *mod
|
||||
}
|
||||
|
||||
func (a *App) AutocompleteChannels(teamId string, term string) (*model.ChannelList, *model.AppError) {
|
||||
if result := <-a.Srv.Store.Channel().AutocompleteInTeam(teamId, term); result.Err != nil {
|
||||
includeDeleted := *a.Config().TeamSettings.ViewArchivedChannels
|
||||
|
||||
if result := <-a.Srv.Store.Channel().AutocompleteInTeam(teamId, term, includeDeleted); result.Err != nil {
|
||||
return nil, result.Err
|
||||
} else {
|
||||
return result.Data.(*model.ChannelList), nil
|
||||
@@ -1502,7 +1523,9 @@ func (a *App) AutocompleteChannels(teamId string, term string) (*model.ChannelLi
|
||||
}
|
||||
|
||||
func (a *App) SearchChannels(teamId string, term string) (*model.ChannelList, *model.AppError) {
|
||||
if result := <-a.Srv.Store.Channel().SearchInTeam(teamId, term); result.Err != nil {
|
||||
includeDeleted := *a.Config().TeamSettings.ViewArchivedChannels
|
||||
|
||||
if result := <-a.Srv.Store.Channel().SearchInTeam(teamId, term, includeDeleted); result.Err != nil {
|
||||
return nil, result.Err
|
||||
} else {
|
||||
return result.Data.(*model.ChannelList), nil
|
||||
|
||||
@@ -175,7 +175,7 @@ func TestJoinDefaultChannelsExperimentalDefaultChannels(t *testing.T) {
|
||||
th.App.JoinDefaultChannels(th.BasicTeam.Id, user, false, "")
|
||||
|
||||
for _, channelName := range defaultChannelList {
|
||||
channel, err := th.App.GetChannelByName(channelName, th.BasicTeam.Id)
|
||||
channel, err := th.App.GetChannelByName(channelName, th.BasicTeam.Id, false)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("Expected nil, got %s", err)
|
||||
|
||||
@@ -59,7 +59,7 @@ func (me *InviteProvider) DoCommand(a *App, args *model.CommandArgs, message str
|
||||
if len(splitMessage) > 1 && splitMessage[1] != "" {
|
||||
targetChannelName := strings.TrimPrefix(strings.TrimSpace(splitMessage[1]), "~")
|
||||
|
||||
if channelToJoin, err = a.GetChannelByName(targetChannelName, args.TeamId); err != nil {
|
||||
if channelToJoin, err = a.GetChannelByName(targetChannelName, args.TeamId, false); err != nil {
|
||||
return &model.CommandResponse{Text: args.T("api.command_invite.channel.error", map[string]interface{}{"Channel": targetChannelName}), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -1116,7 +1116,7 @@ func (a *App) ImportUserTeams(user *model.User, data *[]UserTeamImportData) *mod
|
||||
a.UpdateTeamMemberSchemeRoles(team.Id, user.Id, isSchemeUser, isSchemeAdmin)
|
||||
}
|
||||
|
||||
if defaultChannel, err := a.GetChannelByName(model.DEFAULT_CHANNEL, team.Id); err != nil {
|
||||
if defaultChannel, err := a.GetChannelByName(model.DEFAULT_CHANNEL, team.Id, true); err != nil {
|
||||
return err
|
||||
} else if _, err = a.addUserToChannel(user, defaultChannel, member); err != nil {
|
||||
return err
|
||||
@@ -1139,7 +1139,7 @@ func (a *App) ImportUserChannels(user *model.User, team *model.Team, teamMember
|
||||
|
||||
// Loop through all channels.
|
||||
for _, cdata := range *data {
|
||||
channel, err := a.GetChannelByName(*cdata.Name, team.Id)
|
||||
channel, err := a.GetChannelByName(*cdata.Name, team.Id, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1898,7 +1898,7 @@ func TestImportImportChannel(t *testing.T) {
|
||||
th.CheckChannelsCount(t, channelCount+1)
|
||||
|
||||
// Get the Channel and check all the fields are correct.
|
||||
if channel, err := th.App.GetChannelByName(*data.Name, team.Id); err != nil {
|
||||
if channel, err := th.App.GetChannelByName(*data.Name, team.Id, false); err != nil {
|
||||
t.Fatalf("Failed to get channel from database.")
|
||||
} else {
|
||||
assert.Equal(t, *data.Name, channel.Name)
|
||||
@@ -1923,7 +1923,7 @@ func TestImportImportChannel(t *testing.T) {
|
||||
th.CheckChannelsCount(t, channelCount)
|
||||
|
||||
// Get the Channel and check all the fields are correct.
|
||||
if channel, err := th.App.GetChannelByName(*data.Name, team.Id); err != nil {
|
||||
if channel, err := th.App.GetChannelByName(*data.Name, team.Id, false); err != nil {
|
||||
t.Fatalf("Failed to get channel from database.")
|
||||
} else {
|
||||
assert.Equal(t, *data.Name, channel.Name)
|
||||
@@ -2157,7 +2157,7 @@ func TestImportImportUser(t *testing.T) {
|
||||
DisplayName: ptrStr("Display Name"),
|
||||
Type: ptrStr("O"),
|
||||
}, false)
|
||||
channel, err := th.App.GetChannelByName(channelName, team.Id)
|
||||
channel, err := th.App.GetChannelByName(channelName, team.Id, false)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get channel from database.")
|
||||
}
|
||||
@@ -2671,7 +2671,7 @@ func TestImportImportUser(t *testing.T) {
|
||||
if err := th.App.ImportChannel(channelData, false); err != nil {
|
||||
t.Fatalf("Import should have succeeded.")
|
||||
}
|
||||
channel, err = th.App.GetChannelByName(*channelData.Name, team.Id)
|
||||
channel, err = th.App.GetChannelByName(*channelData.Name, team.Id, false)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get channel from database: %v", err.Error())
|
||||
}
|
||||
@@ -2755,7 +2755,7 @@ func TestImportImportPost(t *testing.T) {
|
||||
DisplayName: ptrStr("Display Name"),
|
||||
Type: ptrStr("O"),
|
||||
}, false)
|
||||
channel, err := th.App.GetChannelByName(channelName, team.Id)
|
||||
channel, err := th.App.GetChannelByName(channelName, team.Id, false)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get channel from database.")
|
||||
}
|
||||
@@ -3959,7 +3959,7 @@ func TestImportPostAndRepliesWithAttachments(t *testing.T) {
|
||||
DisplayName: ptrStr("Display Name"),
|
||||
Type: ptrStr("O"),
|
||||
}, false)
|
||||
_, err = th.App.GetChannelByName(channelName, team.Id)
|
||||
_, err = th.App.GetChannelByName(channelName, team.Id, false)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get channel from database.")
|
||||
}
|
||||
|
||||
@@ -195,12 +195,12 @@ func (api *PluginAPI) GetChannel(channelId string) (*model.Channel, *model.AppEr
|
||||
return api.app.GetChannel(channelId)
|
||||
}
|
||||
|
||||
func (api *PluginAPI) GetChannelByName(teamId, name string) (*model.Channel, *model.AppError) {
|
||||
return api.app.GetChannelByName(name, teamId)
|
||||
func (api *PluginAPI) GetChannelByName(teamId, name string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
||||
return api.app.GetChannelByName(name, teamId, includeDeleted)
|
||||
}
|
||||
|
||||
func (api *PluginAPI) GetChannelByNameForTeamName(teamName, channelName string) (*model.Channel, *model.AppError) {
|
||||
return api.app.GetChannelByNameForTeamName(channelName, teamName)
|
||||
func (api *PluginAPI) GetChannelByNameForTeamName(teamName, channelName string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
||||
return api.app.GetChannelByNameForTeamName(channelName, teamName, includeDeleted)
|
||||
}
|
||||
|
||||
func (api *PluginAPI) GetDirectChannel(userId1, userId2 string) (*model.Channel, *model.AppError) {
|
||||
|
||||
@@ -638,8 +638,9 @@ func (a *App) DeletePostFiles(post *model.Post) {
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOrSearch bool) (*model.PostSearchResults, *model.AppError) {
|
||||
func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOrSearch bool, includeDeletedChannels bool) (*model.PostSearchResults, *model.AppError) {
|
||||
paramsList := model.ParseSearchParams(terms)
|
||||
includeDeleted := includeDeletedChannels && *a.Config().TeamSettings.ViewArchivedChannels
|
||||
|
||||
esInterface := a.Elasticsearch
|
||||
if license := a.License(); esInterface != nil && *a.Config().ElasticsearchSettings.EnableSearching && license != nil && *license.Features.Elasticsearch {
|
||||
@@ -651,7 +652,7 @@ func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOr
|
||||
if params.Terms != "*" {
|
||||
// Convert channel names to channel IDs
|
||||
for idx, channelName := range params.InChannels {
|
||||
if channel, err := a.GetChannelByName(channelName, teamId); err != nil {
|
||||
if channel, err := a.GetChannelByName(channelName, teamId, includeDeleted); err != nil {
|
||||
mlog.Error(fmt.Sprint(err))
|
||||
} else {
|
||||
params.InChannels[idx] = channel.Id
|
||||
@@ -677,7 +678,7 @@ func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOr
|
||||
}
|
||||
|
||||
// We only allow the user to search in channels they are a member of.
|
||||
userChannels, err := a.GetChannelsForUser(teamId, userId)
|
||||
userChannels, err := a.GetChannelsForUser(teamId, userId, includeDeleted)
|
||||
if err != nil {
|
||||
mlog.Error(fmt.Sprint(err))
|
||||
return nil, err
|
||||
@@ -710,6 +711,7 @@ func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOr
|
||||
channels := []store.StoreChannel{}
|
||||
|
||||
for _, params := range paramsList {
|
||||
params.IncludeDeletedChannels = includeDeleted
|
||||
params.OrTerms = isOrSearch
|
||||
// don't allow users to search for everything
|
||||
if params.Terms != "*" {
|
||||
|
||||
@@ -715,7 +715,7 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string)
|
||||
|
||||
var channelList *model.ChannelList
|
||||
|
||||
if result := <-a.Srv.Store.Channel().GetChannels(team.Id, user.Id); result.Err != nil {
|
||||
if result := <-a.Srv.Store.Channel().GetChannels(team.Id, user.Id, true); result.Err != nil {
|
||||
if result.Err.Id == "store.sql_channel.get_channels.not_found.app_error" {
|
||||
channelList = &model.ChannelList{}
|
||||
} else {
|
||||
|
||||
@@ -901,7 +901,7 @@ func (a *App) UpdateActive(user *model.User, active bool) (*model.User, *model.A
|
||||
}
|
||||
|
||||
for _, team := range teamsForUser {
|
||||
channelsForUser, err := a.GetChannelsForUser(team.Id, user.Id)
|
||||
channelsForUser, err := a.GetChannelsForUser(team.Id, user.Id, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -334,7 +334,7 @@ func (webCon *WebConn) ShouldSendEvent(msg *model.WebSocketEvent) bool {
|
||||
}
|
||||
|
||||
if webCon.AllChannelMembers == nil {
|
||||
if result := <-webCon.App.Srv.Store.Channel().GetAllChannelMembersForUser(webCon.UserId, true); result.Err != nil {
|
||||
if result := <-webCon.App.Srv.Store.Channel().GetAllChannelMembersForUser(webCon.UserId, true, false); result.Err != nil {
|
||||
mlog.Error("webhub.shouldSendEvent: " + result.Err.Error())
|
||||
return false
|
||||
} else {
|
||||
|
||||
Ссылка в новой задаче
Block a user