Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 19f9f98

Browse files
authored
Element-R: Report events with withheld keys separately to Posthog. (#12755)
* Remove refs to deprecated method `MatrixEvent.isEncryptedDisabledForUnverifiedDevices` is now deprecated * Report new posthog code for withheld message keys
1 parent c894beb commit 19f9f98

File tree

6 files changed

+36
-57
lines changed

6 files changed

+36
-57
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
},
7474
"dependencies": {
7575
"@babel/runtime": "^7.12.5",
76-
"@matrix-org/analytics-events": "^0.23.0",
76+
"@matrix-org/analytics-events": "^0.24.0",
7777
"@matrix-org/emojibase-bindings": "^1.1.2",
7878
"@matrix-org/matrix-wysiwyg": "2.37.4",
7979
"@matrix-org/react-sdk-module-api": "^2.4.0",

src/DecryptionFailureTracker.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ export class DecryptionFailureTracker {
7878
// Map JS-SDK error codes to tracker codes for aggregation
7979
switch (errorCode) {
8080
case DecryptionFailureCode.MEGOLM_UNKNOWN_INBOUND_SESSION_ID:
81+
case DecryptionFailureCode.MEGOLM_KEY_WITHHELD:
8182
return "OlmKeysNotSentError";
83+
case DecryptionFailureCode.MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE:
84+
return "RoomKeysWithheldForUnverifiedDevice";
8285
case DecryptionFailureCode.OLM_UNKNOWN_MESSAGE_INDEX:
8386
return "OlmIndexError";
8487
case DecryptionFailureCode.HISTORICAL_MESSAGE_NO_KEY_BACKUP:

src/components/views/messages/DecryptionFailureBody.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ import { IBodyProps } from "./IBodyProps";
2323
import { LocalDeviceVerificationStateContext } from "../../../contexts/LocalDeviceVerificationStateContext";
2424

2525
function getErrorMessage(mxEvent: MatrixEvent, isVerified: boolean | undefined): string {
26-
if (mxEvent.isEncryptedDisabledForUnverifiedDevices) return _t("timeline|decryption_failure|blocked");
2726
switch (mxEvent.decryptionFailureReason) {
27+
case DecryptionFailureCode.MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE:
28+
return _t("timeline|decryption_failure|blocked");
29+
2830
case DecryptionFailureCode.HISTORICAL_MESSAGE_NO_KEY_BACKUP:
2931
return _t("timeline|decryption_failure|historical_event_no_key_backup");
3032

test/DecryptionFailureTracker-test.ts

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -490,47 +490,22 @@ describe("DecryptionFailureTracker", function () {
490490

491491
const now = Date.now();
492492

493-
const event1 = await createFailedDecryptionEvent({
494-
code: DecryptionFailureCode.MEGOLM_UNKNOWN_INBOUND_SESSION_ID,
495-
});
496-
tracker.addVisibleEvent(event1);
497-
eventDecrypted(tracker, event1, now);
498-
499-
const event2 = await createFailedDecryptionEvent({
500-
code: DecryptionFailureCode.OLM_UNKNOWN_MESSAGE_INDEX,
501-
});
502-
tracker.addVisibleEvent(event2);
503-
eventDecrypted(tracker, event2, now);
504-
505-
const event3 = await createFailedDecryptionEvent({
506-
code: DecryptionFailureCode.HISTORICAL_MESSAGE_NO_KEY_BACKUP,
507-
});
508-
tracker.addVisibleEvent(event3);
509-
eventDecrypted(tracker, event3, now);
510-
511-
const event4 = await createFailedDecryptionEvent({
512-
code: DecryptionFailureCode.HISTORICAL_MESSAGE_BACKUP_UNCONFIGURED,
513-
});
514-
tracker.addVisibleEvent(event4);
515-
eventDecrypted(tracker, event4, now);
516-
517-
const event5 = await createFailedDecryptionEvent({
518-
code: DecryptionFailureCode.HISTORICAL_MESSAGE_WORKING_BACKUP,
519-
});
520-
tracker.addVisibleEvent(event5);
521-
eventDecrypted(tracker, event5, now);
522-
523-
const event6 = await createFailedDecryptionEvent({
524-
code: DecryptionFailureCode.HISTORICAL_MESSAGE_USER_NOT_JOINED,
525-
});
526-
tracker.addVisibleEvent(event6);
527-
eventDecrypted(tracker, event6, now);
528-
529-
const event7 = await createFailedDecryptionEvent({
530-
code: DecryptionFailureCode.UNKNOWN_ERROR,
531-
});
532-
tracker.addVisibleEvent(event7);
533-
eventDecrypted(tracker, event7, now);
493+
async function createAndTrackEventWithError(code: DecryptionFailureCode) {
494+
const event = await createFailedDecryptionEvent({ code });
495+
tracker.addVisibleEvent(event);
496+
eventDecrypted(tracker, event, now);
497+
return event;
498+
}
499+
500+
await createAndTrackEventWithError(DecryptionFailureCode.MEGOLM_UNKNOWN_INBOUND_SESSION_ID);
501+
await createAndTrackEventWithError(DecryptionFailureCode.OLM_UNKNOWN_MESSAGE_INDEX);
502+
await createAndTrackEventWithError(DecryptionFailureCode.HISTORICAL_MESSAGE_NO_KEY_BACKUP);
503+
await createAndTrackEventWithError(DecryptionFailureCode.HISTORICAL_MESSAGE_BACKUP_UNCONFIGURED);
504+
await createAndTrackEventWithError(DecryptionFailureCode.HISTORICAL_MESSAGE_WORKING_BACKUP);
505+
await createAndTrackEventWithError(DecryptionFailureCode.HISTORICAL_MESSAGE_USER_NOT_JOINED);
506+
await createAndTrackEventWithError(DecryptionFailureCode.MEGOLM_KEY_WITHHELD);
507+
await createAndTrackEventWithError(DecryptionFailureCode.MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE);
508+
await createAndTrackEventWithError(DecryptionFailureCode.UNKNOWN_ERROR);
534509

535510
// Pretend "now" is Infinity
536511
tracker.checkFailures(Infinity);
@@ -542,6 +517,8 @@ describe("DecryptionFailureTracker", function () {
542517
"HistoricalMessage",
543518
"HistoricalMessage",
544519
"ExpectedDueToMembership",
520+
"OlmKeysNotSentError",
521+
"RoomKeysWithheldForUnverifiedDevice",
545522
"UnknownError",
546523
]);
547524
});

test/components/views/messages/DecryptionFailureBody-test.tsx

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,15 @@ describe("DecryptionFailureBody", () => {
5050
expect(container).toMatchSnapshot();
5151
});
5252

53-
it(`Should display "The sender has blocked you from receiving this message"`, () => {
53+
it(`Should display "The sender has blocked you from receiving this message"`, async () => {
5454
// When
55-
const event = mkEvent({
56-
type: "m.room.message",
57-
room: "myfakeroom",
58-
user: "myfakeuser",
59-
content: {
60-
msgtype: "m.bad.encrypted",
61-
},
62-
event: true,
55+
const event = await mkDecryptionFailureMatrixEvent({
56+
code: DecryptionFailureCode.MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE,
57+
msg: "withheld",
58+
roomId: "myfakeroom",
59+
sender: "myfakeuser",
6360
});
64-
jest.spyOn(event, "isEncryptedDisabledForUnverifiedDevices", "get").mockReturnValue(true);
61+
6562
const { container } = customRender(event);
6663

6764
// Then

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1773,10 +1773,10 @@
17731773
resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe"
17741774
integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==
17751775

1776-
"@matrix-org/analytics-events@^0.23.0":
1777-
version "0.23.1"
1778-
resolved "https://registry.yarnpkg.com/@matrix-org/analytics-events/-/analytics-events-0.23.1.tgz#206224f63e64b8cd892f704964204bce433bd189"
1779-
integrity sha512-+DuK5F313bZfO0jCsP7X3u0FQ09IM9Ujc9Zf//XoxzGThG9pvSYsEyNXQO7kUeQHwXlOobtVg1QcP172kN+h/g==
1776+
"@matrix-org/analytics-events@^0.24.0":
1777+
version "0.24.0"
1778+
resolved "https://registry.yarnpkg.com/@matrix-org/analytics-events/-/analytics-events-0.24.0.tgz#21a64537ac975b18e1eb13d9fd0bdc7d448a6039"
1779+
integrity sha512-3FDdtqZ+5cMqVffWjFNOIQ7RDFN6XS11kqdtN2ps8uvq5ce8gT0yXQvK37WeKWKZZ5QAKeoMzGhud+lsVcb1xg==
17801780

17811781
"@matrix-org/emojibase-bindings@^1.1.2":
17821782
version "1.1.3"

0 commit comments

Comments
 (0)