diff --git a/ts/ConversationController.ts b/ts/ConversationController.ts index 4c65b0661c..887e0d696f 100644 --- a/ts/ConversationController.ts +++ b/ts/ConversationController.ts @@ -279,7 +279,12 @@ export class ConversationController { getOurConversationId(): string | undefined { const e164 = window.textsecure.storage.user.getNumber(); const uuid = window.textsecure.storage.user.getUuid()?.toString(); - return this.ensureContactIds({ e164, uuid, highTrust: true }); + return this.ensureContactIds({ + e164, + uuid, + highTrust: true, + reason: 'getOurConversationId', + }); } getOurConversationIdOrThrow(): string { @@ -325,11 +330,20 @@ export class ConversationController { e164, uuid, highTrust, - }: { - e164?: string | null; - uuid?: string | null; - highTrust?: boolean; - }): string | undefined { + reason, + }: + | { + e164?: string | null; + uuid?: string | null; + highTrust?: false; + reason?: void; + } + | { + e164?: string | null; + uuid?: string | null; + highTrust: true; + reason: string; + }): string | undefined { // Check for at least one parameter being provided. This is necessary // because this path can be called on startup to resolve our own ID before // our phone number or UUID are known. The existing behavior in these @@ -346,7 +360,10 @@ export class ConversationController { // 1. Handle no match at all if (!convoE164 && !convoUuid) { - log.info('ensureContactIds: Creating new contact, no matches found'); + log.info( + 'ensureContactIds: Creating new contact, no matches found', + highTrust ? reason : 'no reason' + ); const newConvo = this.getOrCreate(identifier, 'private'); if (highTrust && e164) { newConvo.updateE164(e164); @@ -375,7 +392,10 @@ export class ConversationController { // Fill in the UUID for an e164-only contact if (normalizedUuid && !convoE164.get('uuid')) { if (highTrust) { - log.info('ensureContactIds: Adding UUID to e164-only match'); + log.info( + `ensureContactIds: Adding UUID (${uuid}) to e164-only match ` + + `(${e164}), reason: ${reason}` + ); convoE164.updateUuid(normalizedUuid); updateConversation(convoE164.attributes); } @@ -389,7 +409,10 @@ export class ConversationController { const newConvo = this.getOrCreate(normalizedUuid, 'private'); if (highTrust) { - log.info('ensureContactIds: Moving e164 from old contact to new'); + log.info( + `ensureContactIds: Moving e164 (${e164}) from old contact ` + + `(${convoE164.get('uuid')}) to new (${uuid}), reason: ${reason}` + ); // Remove the e164 from the old contact... convoE164.set({ e164: undefined }); @@ -406,7 +429,10 @@ export class ConversationController { } if (!convoE164 && convoUuid) { if (e164 && highTrust) { - log.info('ensureContactIds: Adding e164 to UUID-only match'); + log.info( + `ensureContactIds: Adding e164 (${e164}) to UUID-only match ` + + `(${uuid}), reason: ${reason}` + ); convoUuid.updateE164(e164); updateConversation(convoUuid.attributes); } @@ -429,7 +455,9 @@ export class ConversationController { // Conflict: If e164 match already has a UUID, we remove its e164. if (convoE164.get('uuid') && convoE164.get('uuid') !== normalizedUuid) { log.info( - 'ensureContactIds: e164 match had different UUID than incoming pair, removing its e164.' + `ensureContactIds: e164 match (${e164}) had different ` + + `UUID(${convoE164.get('uuid')}) than incoming pair (${uuid}), ` + + `removing its e164, reason: ${reason}` ); // Remove the e164 from the old contact... diff --git a/ts/background.ts b/ts/background.ts index a9f342b16c..66deca8cde 100644 --- a/ts/background.ts +++ b/ts/background.ts @@ -2467,6 +2467,7 @@ export async function startApp(): Promise { e164: sender, uuid: senderUuid, highTrust: true, + reason: `onTyping(${typing.timestamp})`, }); // We multiplex between GV1/GV2 groups here, but we don't kick off migrations @@ -2607,6 +2608,7 @@ export async function startApp(): Promise { e164: details.number, uuid: details.uuid, highTrust: true, + reason: 'onContactReceived', }); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const conversation = window.ConversationController.get(detailsId)!; @@ -2835,6 +2837,7 @@ export async function startApp(): Promise { e164: envelope.source, uuid: envelope.sourceUuid, highTrust: true, + reason: `onEnvelopeReceived(${envelope.timestamp})`, }); } } @@ -2970,6 +2973,7 @@ export async function startApp(): Promise { e164: data.source, uuid: data.sourceUuid, highTrust: true, + reason: 'onProfileKeyUpdate', }); const conversation = window.ConversationController.get(conversationId); @@ -3055,6 +3059,7 @@ export async function startApp(): Promise { uuid: destinationUuid, e164: destination, highTrust: true, + reason: `unidentifiedStatus(${timestamp})`, } ); if (!conversationId || conversationId === ourId) { @@ -3187,6 +3192,7 @@ export async function startApp(): Promise { e164: source, uuid: sourceUuid, highTrust: true, + reason: `getMessageDescriptor(${message.timestamp}): group v1`, }); const conversationId = window.ConversationController.ensureGroup(id, { @@ -3203,6 +3209,7 @@ export async function startApp(): Promise { e164: destination, uuid: destinationUuid, highTrust: true, + reason: `getMessageDescriptor(${message.timestamp}): private`, }); if (!id) { confirm(); @@ -3609,6 +3616,7 @@ export async function startApp(): Promise { e164: source, uuid: sourceUuid, highTrust: true, + reason: `onReadOrViewReceipt(${envelopeTimestamp})`, } ); log.info( @@ -3775,6 +3783,7 @@ export async function startApp(): Promise { e164, uuid, highTrust: true, + reason: 'onVerified', }); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const contact = window.ConversationController.get(verifiedId)!; @@ -3805,6 +3814,7 @@ export async function startApp(): Promise { e164: source, uuid: sourceUuid, highTrust: true, + reason: `onDeliveryReceipt(${envelopeTimestamp})`, } ); diff --git a/ts/models/conversations.ts b/ts/models/conversations.ts index a9b29c97bb..8de2381735 100644 --- a/ts/models/conversations.ts +++ b/ts/models/conversations.ts @@ -1870,7 +1870,7 @@ export class ConversationModel extends window.Backbone this.set('e164', e164); if (oldValue) { - this.addChangeNumberNotification(); + this.addChangeNumberNotification(oldValue, e164); } window.Signal.Data.updateConversation(this.attributes); @@ -3220,7 +3220,10 @@ export class ConversationModel extends window.Backbone this.set('pendingUniversalTimer', undefined); } - async addChangeNumberNotification(): Promise { + async addChangeNumberNotification( + oldValue: string, + newValue: string + ): Promise { const sourceUuid = this.getCheckedUuid( 'Change number notification without uuid' ); @@ -3236,7 +3239,7 @@ export class ConversationModel extends window.Backbone log.info( `Conversation ${this.idForLogging()}: adding change number ` + - `notification for ${sourceUuid.toString()}` + `notification for ${sourceUuid.toString()} from ${oldValue} to ${newValue}` ); const convos = [ diff --git a/ts/models/messages.ts b/ts/models/messages.ts index bc8a960cda..a3a54ef599 100644 --- a/ts/models/messages.ts +++ b/ts/models/messages.ts @@ -2247,6 +2247,7 @@ export class MessageModel extends window.Backbone.Model { uuid: destinationUuid, e164: destination, highTrust: true, + reason: `handleDataMessage(${initialMessage.timestamp})`, }); if (!destinationConversationId) { return; diff --git a/ts/services/storageRecordOps.ts b/ts/services/storageRecordOps.ts index 84a1d1d40d..be640b9db0 100644 --- a/ts/services/storageRecordOps.ts +++ b/ts/services/storageRecordOps.ts @@ -770,6 +770,7 @@ export async function mergeContactRecord( e164, uuid, highTrust: true, + reason: 'mergeContactRecord', }); if (!id) { diff --git a/ts/textsecure/AccountManager.ts b/ts/textsecure/AccountManager.ts index 72f2dc56de..cc1b85570b 100644 --- a/ts/textsecure/AccountManager.ts +++ b/ts/textsecure/AccountManager.ts @@ -604,6 +604,7 @@ export default class AccountManager extends EventTarget { e164: number, uuid: ourUuid, highTrust: true, + reason: 'createAccount', }); if (!conversationId) { diff --git a/ts/updateConversationsWithUuidLookup.ts b/ts/updateConversationsWithUuidLookup.ts index afd52d9cf0..0e8b0bc805 100644 --- a/ts/updateConversationsWithUuidLookup.ts +++ b/ts/updateConversationsWithUuidLookup.ts @@ -43,6 +43,7 @@ export async function updateConversationsWithUuidLookup({ e164, uuid: uuidFromServer, highTrust: true, + reason: 'updateConversationsWithUuidLookup', }); const maybeFinalConversation = conversationController.get(finalConversationId);