[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
|
channel.DeleteAt = 0
|
||||||
a.Srv().Platform().InvalidateCacheForChannel(channel)
|
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)
|
message.Add("channel_id", channel.Id)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
@@ -1497,7 +1502,12 @@ func (a *App) DeleteChannel(c request.CTX, channel *model.Channel, userID string
|
|||||||
|
|
||||||
a.Srv().Platform().InvalidateCacheForChannel(channel)
|
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("channel_id", channel.Id)
|
||||||
message.Add("delete_at", deleteAt)
|
message.Add("delete_at", deleteAt)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -3078,8 +3088,13 @@ func (a *App) PermanentDeleteChannel(c request.CTX, channel *model.Channel) *mod
|
|||||||
}
|
}
|
||||||
|
|
||||||
a.Srv().Platform().InvalidateCacheForChannel(channel)
|
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("channel_id", channel.Id)
|
||||||
message.Add("delete_at", deleteAt)
|
message.Add("delete_at", deleteAt)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|||||||
@@ -2854,3 +2854,101 @@ func TestPatchChannelMembersNotifyProps(t *testing.T) {
|
|||||||
assert.NotNil(t, appErr)
|
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