feat: implement per-device E2EE message envelopes and retraction#257
Closed
testersweb0-bug wants to merge 3 commits into
Closed
feat: implement per-device E2EE message envelopes and retraction#257testersweb0-bug wants to merge 3 commits into
testersweb0-bug wants to merge 3 commits into
Conversation
|
@testersweb0-bug Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR introduces the schema, backend routing, and WebSocket logic required to fully support True End-to-End Encryption (E2EE) using per-device envelopes, alongside a secure, sender-initiated message retraction flow.
Key Features and Fixes:
message_envelopesSchema: Created a new database table to store per-recipient-device ciphertexts. Added proper relations, indexes, and cascaded deletes to ensure database integrity when messages or devices are removed.send_messageRedesign:messageId,contentType,envelopes, and an optionalciphertextfallback.messageIds (acting as client-generated idempotency keys), preventing double-inserts during network retries.recipientDeviceIdidentifiers linked to the user's active registered devices.sequenceNumber.GET /conversations/:id/messages:req.auth!.deviceId).unavailableplaceholder, without throwing an error.DELETE /messages/:idendpoint now securely nullifies the ciphertext on the message instead of just settingdeletedAt.message_envelopes.message_deletedevent to the room when successfully processed.Related Issues
Closes #182 (Add message_envelopes schema)
Closes #184 (WebSocket send_message accepts per-device envelopes)
Closes #177 (Update GET /conversations/:id/messages to return per-message metadata plus ciphertext)
Closes #189 (Message deletion / retraction with tombstones)
Acceptance Criteria Met
message_deletedbroadcast to the room.messageIdis idempotent (no double-insert).sequenceNumber.Testing Steps
send_messageWebSocket events with the samemessageIdto verify no duplicate records are inserted.unavailableplaceholder is served.message_envelopesare permanently cleared, theciphertextis nulled, and the room receives themessage_deletedbroadcast.Type of change
Checklist