From ae7d6aa90037630005ddf768096d3f64bc3af176 Mon Sep 17 00:00:00 2001 From: Daniel Gasienica Date: Thu, 3 May 2018 11:40:17 -0400 Subject: [PATCH 1/4] Log `Conversation::updateLastMessage` --- js/models/conversations.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index d4034969f..9514eaf54 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -813,17 +813,24 @@ await collection.fetchConversation(this.id, 1); const lastMessage = collection.at(0); + const lastMessageJSON = lastMessage ? lastMessage.toJSON() : null; const lastMessageUpdate = window.Signal.Types.Conversation.createLastMessageUpdate( { currentLastMessageText: this.get('lastMessage') || null, currentTimestamp: this.get('timestamp') || null, - lastMessage: lastMessage ? lastMessage.toJSON() : null, + lastMessage: lastMessageJSON, lastMessageNotificationText: lastMessage ? lastMessage.getNotificationText() : null, } ); + console.log('Conversation: Update last message:', { + id: this.idForLogging() || null, + messageTimestamp: lastMessageUpdate.timestamp || null, + messageType: lastMessageJSON ? lastMessageJSON.type : null, + messageSentAt: lastMessageJSON ? lastMessageJSON.sent_at : null, + }); this.set(lastMessageUpdate); if (this.hasChanged('lastMessage') || this.hasChanged('timestamp')) { From 5c8f734e67451822c4539789df00c26449f3c24a Mon Sep 17 00:00:00 2001 From: Daniel Gasienica Date: Thu, 3 May 2018 11:46:21 -0400 Subject: [PATCH 2/4] Remove newlines from group IDs --- js/modules/privacy.js | 4 +++- test/modules/privacy_test.js | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/js/modules/privacy.js b/js/modules/privacy.js index 50a93dd9b..d737f5d05 100644 --- a/js/modules/privacy.js +++ b/js/modules/privacy.js @@ -73,7 +73,7 @@ exports.redactGroupIds = text => { return text.replace( GROUP_ID_PATTERN, (match, before, id, after) => - `${before}${REDACTION_PLACEHOLDER}${id.slice(-3)}${after}` + `${before}${REDACTION_PLACEHOLDER}${removeNewlines(id).slice(-3)}${after}` ); }; @@ -86,3 +86,5 @@ exports.redactAll = compose( exports.redactGroupIds, exports.redactPhoneNumbers ); + +const removeNewlines = text => text.replace(/\r?\n|\r/g, ''); diff --git a/test/modules/privacy_test.js b/test/modules/privacy_test.js index f9f4f71d9..1c983ef13 100644 --- a/test/modules/privacy_test.js +++ b/test/modules/privacy_test.js @@ -33,6 +33,18 @@ describe('Privacy', () => { 'and group([REDACTED]hij)'; assert.equal(actual, expected); }); + + it('should remove newlines from redacted group IDs', () => { + const text = + 'This is a log line with two group IDs: group(12345678\n9)\n' + + 'and group(abc\ndefghij)'; + + const actual = Privacy.redactGroupIds(text); + const expected = + 'This is a log line with two group IDs: group([REDACTED]789)\n' + + 'and group([REDACTED]hij)'; + assert.equal(actual, expected); + }); }); describe('redactAll', () => { From 0ce56eed877dbd936b4d955a7888f290df30c52c Mon Sep 17 00:00:00 2001 From: Daniel Gasienica Date: Thu, 3 May 2018 11:53:39 -0400 Subject: [PATCH 3/4] Use structured log --- js/models/conversations.js | 12 +++++------- js/models/messages.js | 10 ++++------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index 9514eaf54..ace96f3d8 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -860,14 +860,12 @@ return Promise.resolve(); } - console.log( - 'Updating expireTimer for conversation', - this.idForLogging(), - 'to', + console.log("Update conversation 'expireTimer'", { + id: this.idForLogging(), expireTimer, - 'via', - source - ); + source, + }); + source = source || textsecure.storage.user.getNumber(); const timestamp = receivedAt || Date.now(); diff --git a/js/models/messages.js b/js/models/messages.js index 22d418009..9b743cd37 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -632,13 +632,11 @@ const shouldLogExpireTimerChange = message.isExpirationTimerUpdate() || expireTimer; if (shouldLogExpireTimerChange) { - console.log( - 'Updating expireTimer for conversation', - conversation.idForLogging(), - 'to', + console.log("Update conversation 'expireTimer'", { + id: conversation.idForLogging(), expireTimer, - 'via `handleDataMessage`' - ); + source: 'handleDataMessage', + }); } if (!message.isEndSession() && !message.isGroupUpdate()) { From 13f1ec2e51cb631e5edcff29c3162044597d2cd5 Mon Sep 17 00:00:00 2001 From: Daniel Gasienica Date: Thu, 3 May 2018 13:10:44 -0400 Subject: [PATCH 4/4] Use structured logs Easier to search for static prefix and fields are named. --- js/expiring_messages.js | 4 +++- js/models/messages.js | 7 +++++-- js/views/conversation_view.js | 8 +++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/js/expiring_messages.js b/js/expiring_messages.js index 6c8dd6420..1b019efef 100644 --- a/js/expiring_messages.js +++ b/js/expiring_messages.js @@ -6,7 +6,9 @@ // Load messages that have expired and destroy them var expired = new Whisper.MessageCollection(); expired.on('add', function(message) { - console.log('message', message.get('sent_at'), 'expired'); + console.log('Message expired', { + sentAt: message.get('sent_at'), + }); var conversation = message.getConversation(); if (conversation) { conversation.trigger('expired', message); diff --git a/js/models/messages.js b/js/models/messages.js index 9b743cd37..67431eea6 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -845,7 +845,10 @@ } Whisper.ExpiringMessagesListener.update(); - console.log('message', this.get('sent_at'), 'expires at', expiresAt); + console.log('Set message expiration', { + expiresAt, + sentAt: this.get('sent_at'), + }); } }, }); @@ -959,7 +962,7 @@ }, fetchExpired() { - console.log('loading expired messages'); + console.log('Load expired messages'); this.fetch({ conditions: { expires_at: { $lte: Date.now() } }, addIndividually: true, diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js index 0cea33394..63336b3d7 100644 --- a/js/views/conversation_view.js +++ b/js/views/conversation_view.js @@ -815,11 +815,9 @@ }, async onExpiredCollection(message) { const removeMessage = () => { - console.log( - 'removing message', - message.get('sent_at'), - 'from collection' - ); + console.log('Remove expired message from message collection', { + sentAt: message.get('sent_at'), + }); this.model.messageCollection.remove(message.id); };