Skip to content

Commit a417efe

Browse files
committed
fix(backup)_: dont generate a CR if the synced contact is mutual
Fixes status-im/status-desktop#15849 The problem was that we generated a "fake" contact request for all synced contacts. While it's true that even mutual contacts have a contact request, we don't need it anymore once mutual and since we don't sync messages, we had to generate it with a default message and that message looked very out of place after a recovery.
1 parent 74db631 commit a417efe

File tree

3 files changed

+34
-13
lines changed

3 files changed

+34
-13
lines changed

protocol/messenger_contacts.go

+1
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,7 @@ func (m *Messenger) generateContactRequest(clock uint64, timestamp uint64, conta
601601
contactRequest := common.NewMessage()
602602
contactRequest.ChatId = contact.ID
603603
contactRequest.WhisperTimestamp = timestamp
604+
contactRequest.Timestamp = timestamp
604605
contactRequest.Seen = true
605606
contactRequest.Text = text
606607
if outgoing {

protocol/messenger_handler.go

+4
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,10 @@ func (m *Messenger) handleCommandMessage(state *ReceivedMessageState, message *c
478478
}
479479

480480
func (m *Messenger) syncContactRequestForInstallationContact(contact *Contact, state *ReceivedMessageState, chat *Chat, outgoing bool) error {
481+
if contact.mutual() {
482+
// We only need to generate a contact request if we are not mutual
483+
return nil
484+
}
481485

482486
if chat == nil {
483487
return fmt.Errorf("no chat restored during the contact synchronisation, contact.ID = %s", contact.ID)

server/pairing/sync_device_test.go

+29-13
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,7 @@ func (s *SyncDeviceSuite) TestPairPendingContactRequest() {
619619
type contactRequestAction func(messenger *protocol.Messenger, contactRequestID string) (*protocol.MessengerResponse, error)
620620
type notificationValidateFunc func(r *protocol.ActivityCenterPaginationResponse)
621621

622-
func (s *SyncDeviceSuite) testPairContactRequest(requestAction contactRequestAction, validateFunc notificationValidateFunc) {
622+
func (s *SyncDeviceSuite) testPairContactRequest(requestAction contactRequestAction, validateFunc notificationValidateFunc, validateFuncPaired notificationValidateFunc) {
623623
bobBackend, _ := s.createUser("bob")
624624
defer func() {
625625
s.Require().NoError(bobBackend.Logout())
@@ -648,7 +648,7 @@ func (s *SyncDeviceSuite) testPairContactRequest(requestAction contactRequestAct
648648
}()
649649
s.pairAccounts(alice1Backend, alice1TmpDir, alice2Backend, alice2TmpDir)
650650

651-
internalNotificationValidateFunc := func(m *protocol.Messenger) {
651+
internalNotificationValidateFunc := func(m *protocol.Messenger, isPairedDevice bool) {
652652
acRequest := protocol.ActivityCenterNotificationsRequest{
653653
ActivityTypes: []protocol.ActivityCenterType{
654654
protocol.ActivityCenterNotificationTypeContactRequest,
@@ -658,35 +658,51 @@ func (s *SyncDeviceSuite) testPairContactRequest(requestAction contactRequestAct
658658
}
659659
r, err := m.ActivityCenterNotifications(acRequest)
660660
s.Require().NoError(err)
661-
validateFunc(r)
661+
if isPairedDevice {
662+
validateFuncPaired(r)
663+
} else {
664+
validateFunc(r)
665+
}
662666
}
663667

664-
internalNotificationValidateFunc(alice1Backend.Messenger())
665-
internalNotificationValidateFunc(alice2Backend.Messenger())
668+
internalNotificationValidateFunc(alice1Backend.Messenger(), false)
669+
internalNotificationValidateFunc(alice2Backend.Messenger(), true)
666670
}
667671

668672
func (s *SyncDeviceSuite) TestPairDeclineContactRequest() {
669673
declineContactRequest := func(messenger *protocol.Messenger, contactRequestID string) (*protocol.MessengerResponse, error) {
670674
return messenger.DeclineContactRequest(context.Background(), &requests.DeclineContactRequest{ID: types.Hex2Bytes(contactRequestID)})
671675
}
672-
s.testPairContactRequest(declineContactRequest, func(r *protocol.ActivityCenterPaginationResponse) {
676+
validateFunc := func(r *protocol.ActivityCenterPaginationResponse) {
673677
s.Require().Len(r.Notifications, 1)
674678
s.Require().False(r.Notifications[0].Accepted)
675679
s.Require().True(r.Notifications[0].Dismissed)
676680
s.Require().True(r.Notifications[0].Read)
677-
})
681+
}
682+
s.testPairContactRequest(
683+
declineContactRequest,
684+
validateFunc,
685+
// The paired device will get a notification because the request will not be fulfilled (not mutual)
686+
validateFunc,
687+
)
678688
}
679689

680690
func (s *SyncDeviceSuite) TestPairAcceptContactRequest() {
681691
acceptContactRequest := func(messenger *protocol.Messenger, contactRequestID string) (*protocol.MessengerResponse, error) {
682692
return messenger.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(contactRequestID)})
683693
}
684-
s.testPairContactRequest(acceptContactRequest, func(r *protocol.ActivityCenterPaginationResponse) {
685-
s.Require().Len(r.Notifications, 1)
686-
s.Require().True(r.Notifications[0].Accepted)
687-
s.Require().False(r.Notifications[0].Dismissed)
688-
s.Require().True(r.Notifications[0].Read)
689-
})
694+
s.testPairContactRequest(
695+
acceptContactRequest,
696+
func(r *protocol.ActivityCenterPaginationResponse) {
697+
s.Require().Len(r.Notifications, 1)
698+
s.Require().True(r.Notifications[0].Accepted)
699+
s.Require().False(r.Notifications[0].Dismissed)
700+
s.Require().True(r.Notifications[0].Read)
701+
},
702+
// The paired device doesn't need a notification because it will receive the fully mutual contact
703+
func(r *protocol.ActivityCenterPaginationResponse) {
704+
s.Require().Len(r.Notifications, 0)
705+
})
690706
}
691707

692708
type testTimeSource struct{}

0 commit comments

Comments
 (0)