Skip to content

Commit 3dd6974

Browse files
committed
fix(cr): only add accepted cr message when it was not accepted before
Fixes status-im/status-app#21043
1 parent 57ec98c commit 3dd6974

3 files changed

Lines changed: 26 additions & 17 deletions

File tree

protocol/messenger_contact_requests_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,13 @@ func (s *MessengerContactRequestSuite) TestAliceSeesOnlyOneAcceptFromBob() {
671671
s.acceptContactRequest(contactRequest, alice, bob)
672672

673673
// Accept contact request again
674-
_, err := bob.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(contactRequest.ID), ContactID: contactRequest.From})
674+
secondAcceptResp, err := bob.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(contactRequest.ID), ContactID: contactRequest.From})
675675
s.Require().NoError(err)
676+
s.Require().NotNil(secondAcceptResp)
677+
678+
// A repeated accept must not produce a duplicate "accepted" system message.
679+
secondAcceptMutualStateUpdate := s.findFirstByContentType(secondAcceptResp.Messages(), protobuf.ChatMessage_SYSTEM_MESSAGE_MUTUAL_EVENT_ACCEPTED)
680+
s.Require().Nil(secondAcceptMutualStateUpdate)
676681

677682
// Check we don't have extra messages on Alice's side
678683
resp, err := WaitOnMessengerResponse(alice,

protocol/messenger_contacts.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ func (m *Messenger) updateAcceptedContactRequest(response *MessengerResponse, co
315315
return nil, err
316316
}
317317

318+
previouslyAccepted := contactRequest.ContactRequestState == common.ContactRequestStateAccepted
318319
contactRequest.ContactRequestState = common.ContactRequestStateAccepted
319320

320321
err = m.persistence.SetContactRequestState(contactRequest.ID, contactRequest.ContactRequestState)
@@ -388,22 +389,24 @@ func (m *Messenger) updateAcceptedContactRequest(response *MessengerResponse, co
388389
response.AddMessage(contactRequest)
389390
response.AddContact(contact)
390391

391-
// Add mutual state update message for incoming contact request
392-
clock, timestamp := chat.NextClockAndTimestamp(m.getTimesource())
393-
updateMessage, err := m.prepareMutualStateUpdateMessage(contact.ID, contacts.MutualStateUpdateTypeAdded, clock, timestamp, true)
394-
if err != nil {
395-
return nil, err
396-
}
392+
// Add mutual state update message only on first acceptance.
393+
if !previouslyAccepted {
394+
clock, timestamp := chat.NextClockAndTimestamp(m.getTimesource())
395+
updateMessage, err := m.prepareMutualStateUpdateMessage(contact.ID, contacts.MutualStateUpdateTypeAdded, clock, timestamp, true)
396+
if err != nil {
397+
return nil, err
398+
}
397399

398-
err = m.prepareMessage(updateMessage, m.httpServer)
399-
if err != nil {
400-
return nil, err
401-
}
402-
err = m.persistence.SaveMessages([]*common.Message{updateMessage})
403-
if err != nil {
404-
return nil, err
400+
err = m.prepareMessage(updateMessage, m.httpServer)
401+
if err != nil {
402+
return nil, err
403+
}
404+
err = m.persistence.SaveMessages([]*common.Message{updateMessage})
405+
if err != nil {
406+
return nil, err
407+
}
408+
response.AddMessage(updateMessage)
405409
}
406-
response.AddMessage(updateMessage)
407410
response.AddChat(chat)
408411

409412
return response, nil

protocol/messenger_handler.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,7 @@ func (m *Messenger) handleAcceptContactRequestMessage(state *ReceivedMessageStat
912912
previouslyAccepted := request != nil && request.ContactRequestState == common.ContactRequestStateAccepted
913913

914914
contact := state.CurrentMessageState.Contact
915+
wasMutual := contact.Mutual()
915916

916917
// The request message will be added to the response here
917918
processingResponse, err := m.handleAcceptContactRequest(state.Response, contact, request, clock)
@@ -941,8 +942,8 @@ func (m *Messenger) handleAcceptContactRequestMessage(state *ReceivedMessageStat
941942
chat.Active = true
942943
}
943944

944-
// Add mutual state update message for incoming contact request
945-
if !previouslyAccepted {
945+
// Add mutual state update message only when transitioning to mutual.
946+
if !wasMutual && contact.Mutual() && !previouslyAccepted {
946947
clock, timestamp := chat.NextClockAndTimestamp(m.getTimesource())
947948

948949
updateMessage, err := m.prepareMutualStateUpdateMessage(contact.ID, contacts.MutualStateUpdateTypeAdded, clock, timestamp, false)

0 commit comments

Comments
 (0)