Skip to content

Commit 4322ba7

Browse files
author
Jeff Yanta
committed
push: only group host messages are pushed
1 parent 184a502 commit 4322ba7

File tree

2 files changed

+68
-27
lines changed

2 files changed

+68
-27
lines changed

push/messaging.go

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,6 @@ func (h *EventHandler) handleMessage(ctx context.Context, chatID *commonpb.ChatI
6464
h.log.Debug("Dropping push, no content")
6565
return nil
6666
}
67-
// todo: filter by speakers?
68-
if msg.WasSenderOffStage {
69-
h.log.Debug("Dropping push, sender was off stage")
70-
return nil
71-
}
7267

7368
sender, err := h.profiles.GetProfile(ctx, msg.SenderId)
7469
if errors.Is(err, profile.ErrNotFound) {
@@ -82,6 +77,33 @@ func (h *EventHandler) handleMessage(ctx context.Context, chatID *commonpb.ChatI
8277
return fmt.Errorf("failed to get chat: %w", err)
8378
}
8479

80+
var title string
81+
switch md.Type {
82+
case chatpb.Metadata_GROUP:
83+
if md.Owner == nil || !bytes.Equal(md.Owner.Value, msg.SenderId.Value) {
84+
h.log.Debug("Dropping push, sender is not owner")
85+
return nil
86+
}
87+
88+
title = fmt.Sprintf("#%d", md.RoomNumber)
89+
if len(md.DisplayName) > 0 {
90+
title = fmt.Sprintf("#%d: %s", md.RoomNumber, md.DisplayName)
91+
}
92+
case chatpb.Metadata_TWO_WAY:
93+
title = sender.DisplayName
94+
}
95+
96+
var pushPreview string
97+
switch typed := msg.Content[0].Type.(type) {
98+
case *messagingpb.Content_Text:
99+
pushPreview = typed.Text.Text
100+
case *messagingpb.Content_Reply:
101+
// todo: this needs tests
102+
pushPreview = typed.Reply.ReplyText
103+
default:
104+
return nil
105+
}
106+
85107
members, err := h.chats.GetMembers(ctx, chatID)
86108
if err != nil {
87109
return fmt.Errorf("failed to get chat members: %w", err)
@@ -103,28 +125,6 @@ func (h *EventHandler) handleMessage(ctx context.Context, chatID *commonpb.ChatI
103125
return nil
104126
}
105127

106-
var pushPreview string
107-
switch typed := msg.Content[0].Type.(type) {
108-
case *messagingpb.Content_Text:
109-
pushPreview = typed.Text.Text
110-
case *messagingpb.Content_Reply:
111-
// todo: this needs tests
112-
pushPreview = typed.Reply.ReplyText
113-
default:
114-
return nil
115-
}
116-
117-
var title string
118-
switch md.Type {
119-
case chatpb.Metadata_GROUP:
120-
title = fmt.Sprintf("#%d", md.RoomNumber)
121-
if len(md.DisplayName) > 0 {
122-
title = fmt.Sprintf("#%d: %s", md.RoomNumber, md.DisplayName)
123-
}
124-
case chatpb.Metadata_TWO_WAY:
125-
title = sender.DisplayName
126-
}
127-
128128
data := make(map[string]string)
129129
if err := h.pusher.SendPushes(ctx, chatID, pushMembers, title, pushPreview, &sender.DisplayName, data); err != nil {
130130
h.log.Warn("Failed to send pushes", zap.String("chat_id", base64.StdEncoding.EncodeToString(chatID.Value)), zap.Error(err))

push/tests/messaging.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ func testEventHandler_HandleMessage(t *testing.T, _ push.TokenStore, profileStor
160160
md, err := chatStore.CreateChat(ctx, &chatpb.Metadata{
161161
ChatId: chatID,
162162
Type: chatpb.Metadata_GROUP,
163+
Owner: sender,
163164
})
164165
if err != nil {
165166
return nil, err
@@ -198,6 +199,7 @@ func testEventHandler_HandleMessage(t *testing.T, _ push.TokenStore, profileStor
198199
md, err := chatStore.CreateChat(ctx, &chatpb.Metadata{
199200
ChatId: chatID,
200201
Type: chatpb.Metadata_GROUP,
202+
Owner: sender,
201203
})
202204
if err != nil {
203205
return nil, err
@@ -272,6 +274,45 @@ func testEventHandler_HandleMessage(t *testing.T, _ push.TokenStore, profileStor
272274
},
273275
expectedPushes: nil,
274276
},
277+
{
278+
name: "push_disabled_sender_not_group_host",
279+
setupChat: func() (*chatpb.Metadata, error) {
280+
chatID := model.MustGenerateChatID()
281+
md, err := chatStore.CreateChat(ctx, &chatpb.Metadata{
282+
ChatId: chatID,
283+
Type: chatpb.Metadata_GROUP,
284+
Owner: recipient,
285+
})
286+
if err != nil {
287+
return nil, err
288+
}
289+
for _, user := range []*commonpb.UserId{sender, recipient} {
290+
err = chatStore.AddMember(ctx, chatID, chat.Member{UserID: user})
291+
if err != nil {
292+
return nil, err
293+
}
294+
295+
err = chatStore.SetPushState(ctx, chatID, user, false)
296+
if err != nil {
297+
return nil, err
298+
}
299+
}
300+
return md, nil
301+
},
302+
message: &messagingpb.Message{
303+
SenderId: sender,
304+
Content: []*messagingpb.Content{
305+
{
306+
Type: &messagingpb.Content_Text{
307+
Text: &messagingpb.TextContent{
308+
Text: "Hello from non-host",
309+
},
310+
},
311+
},
312+
},
313+
},
314+
expectedPushes: nil,
315+
},
275316
}
276317

277318
for i, tt := range tests {

0 commit comments

Comments
 (0)