[MM-54757] Stop broadcasting channel_deleted/channel_restored messages from private channels to non-members (#27001)
* [MM-54757] Stop broadcasting channel_deleted/channel_restored messages from private channels to non-members * Remove unnecessary return --------- Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
30e3f8cdd7
Коммит
7e797cea3b
@@ -764,7 +764,12 @@ func (a *App) RestoreChannel(c request.CTX, channel *model.Channel, userID strin
|
||||
channel.DeleteAt = 0
|
||||
a.Srv().Platform().InvalidateCacheForChannel(channel)
|
||||
|
||||
message := model.NewWebSocketEvent(model.WebsocketEventChannelRestored, channel.TeamId, "", "", nil, "")
|
||||
var message *model.WebSocketEvent
|
||||
if channel.Type == model.ChannelTypeOpen {
|
||||
message = model.NewWebSocketEvent(model.WebsocketEventChannelRestored, channel.TeamId, "", "", nil, "")
|
||||
} else {
|
||||
message = model.NewWebSocketEvent(model.WebsocketEventChannelRestored, "", channel.Id, "", nil, "")
|
||||
}
|
||||
message.Add("channel_id", channel.Id)
|
||||
a.Publish(message)
|
||||
|
||||
@@ -1497,7 +1502,12 @@ func (a *App) DeleteChannel(c request.CTX, channel *model.Channel, userID string
|
||||
|
||||
a.Srv().Platform().InvalidateCacheForChannel(channel)
|
||||
|
||||
message := model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
|
||||
var message *model.WebSocketEvent
|
||||
if channel.Type == model.ChannelTypeOpen {
|
||||
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
|
||||
} else {
|
||||
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, "", channel.Id, "", nil, "")
|
||||
}
|
||||
message.Add("channel_id", channel.Id)
|
||||
message.Add("delete_at", deleteAt)
|
||||
a.Publish(message)
|
||||
@@ -3078,8 +3088,13 @@ func (a *App) PermanentDeleteChannel(c request.CTX, channel *model.Channel) *mod
|
||||
}
|
||||
|
||||
a.Srv().Platform().InvalidateCacheForChannel(channel)
|
||||
message := model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
|
||||
|
||||
var message *model.WebSocketEvent
|
||||
if channel.Type == model.ChannelTypeOpen {
|
||||
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil, "")
|
||||
} else {
|
||||
message = model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, "", channel.Id, "", nil, "")
|
||||
}
|
||||
message.Add("channel_id", channel.Id)
|
||||
message.Add("delete_at", deleteAt)
|
||||
a.Publish(message)
|
||||
|
||||
@@ -2854,3 +2854,101 @@ func TestPatchChannelMembersNotifyProps(t *testing.T) {
|
||||
assert.NotNil(t, appErr)
|
||||
})
|
||||
}
|
||||
|
||||
func TestDeleteChannel(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
t.Run("should send the correct websocket events", func(t *testing.T) {
|
||||
user1 := th.CreateUser()
|
||||
user2 := th.CreateUser()
|
||||
|
||||
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
|
||||
channel2 := th.CreatePrivateChannel(th.Context, th.BasicTeam)
|
||||
|
||||
th.LinkUserToTeam(user1, th.BasicTeam)
|
||||
th.LinkUserToTeam(user2, th.BasicTeam)
|
||||
th.AddUserToChannel(user1, channel1)
|
||||
th.AddUserToChannel(user1, channel2)
|
||||
|
||||
eventTypesFilter := []model.WebsocketEventType{model.WebsocketEventChannelDeleted}
|
||||
|
||||
messages1, closeWS1 := connectFakeWebSocket(t, th, user1.Id, "", eventTypesFilter)
|
||||
defer closeWS1()
|
||||
messages2, closeWS2 := connectFakeWebSocket(t, th, user2.Id, "", eventTypesFilter)
|
||||
defer closeWS2()
|
||||
|
||||
err := th.App.DeleteChannel(th.Context, channel1, "")
|
||||
require.Nil(t, err)
|
||||
|
||||
received := <-messages1
|
||||
assert.Equal(t, model.WebsocketEventChannelDeleted, received.EventType())
|
||||
received = <-messages2
|
||||
assert.Equal(t, model.WebsocketEventChannelDeleted, received.EventType())
|
||||
|
||||
err = th.App.DeleteChannel(th.Context, channel2, "")
|
||||
require.Nil(t, err)
|
||||
|
||||
select {
|
||||
case shouldNotReceive := <-messages2:
|
||||
assert.NotEqual(t, model.WebsocketEventChannelDeleted, shouldNotReceive.EventType())
|
||||
case <-time.After(2 * time.Second):
|
||||
}
|
||||
|
||||
received = <-messages1
|
||||
assert.Equal(t, model.WebsocketEventChannelDeleted, received.EventType())
|
||||
})
|
||||
}
|
||||
|
||||
func TestRestoreChannel(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
t.Run("should send the correct websocket events", func(t *testing.T) {
|
||||
user1 := th.CreateUser()
|
||||
user2 := th.CreateUser()
|
||||
|
||||
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
|
||||
channel2 := th.CreatePrivateChannel(th.Context, th.BasicTeam)
|
||||
|
||||
th.LinkUserToTeam(user1, th.BasicTeam)
|
||||
th.LinkUserToTeam(user2, th.BasicTeam)
|
||||
th.AddUserToChannel(user1, channel1)
|
||||
th.AddUserToChannel(user1, channel2)
|
||||
|
||||
err := th.App.DeleteChannel(th.Context, channel1, "")
|
||||
require.Nil(t, err)
|
||||
err = th.App.DeleteChannel(th.Context, channel2, "")
|
||||
require.Nil(t, err)
|
||||
|
||||
channel1.DeleteAt = time.Now().UnixMilli()
|
||||
channel2.DeleteAt = time.Now().UnixMilli()
|
||||
|
||||
eventTypesFilter := []model.WebsocketEventType{model.WebsocketEventChannelRestored}
|
||||
|
||||
messages1, closeWS1 := connectFakeWebSocket(t, th, user1.Id, "", eventTypesFilter)
|
||||
defer closeWS1()
|
||||
messages2, closeWS2 := connectFakeWebSocket(t, th, user2.Id, "", eventTypesFilter)
|
||||
defer closeWS2()
|
||||
|
||||
_, err = th.App.RestoreChannel(th.Context, channel1, "")
|
||||
require.Nil(t, err)
|
||||
|
||||
received := <-messages1
|
||||
assert.Equal(t, model.WebsocketEventChannelRestored, received.EventType())
|
||||
received = <-messages2
|
||||
assert.Equal(t, model.WebsocketEventChannelRestored, received.EventType())
|
||||
|
||||
_, err = th.App.RestoreChannel(th.Context, channel2, "")
|
||||
require.Nil(t, err)
|
||||
|
||||
select {
|
||||
case shouldNotReceive := <-messages2:
|
||||
assert.NotEqual(t, model.WebsocketEventChannelRestored, shouldNotReceive.EventType())
|
||||
case <-time.After(2 * time.Second):
|
||||
}
|
||||
|
||||
received = <-messages1
|
||||
assert.Equal(t, model.WebsocketEventChannelRestored, received.EventType())
|
||||
})
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user