Page MenuHomePhabricator

D12945.id43105.diff
No OneTemporary

D12945.id43105.diff

diff --git a/lib/tunnelbroker/use-peer-to-peer-message-handler.js b/lib/tunnelbroker/use-peer-to-peer-message-handler.js
--- a/lib/tunnelbroker/use-peer-to-peer-message-handler.js
+++ b/lib/tunnelbroker/use-peer-to-peer-message-handler.js
@@ -8,6 +8,7 @@
import { logOutActionTypes, useLogOut } from '../actions/user-actions.js';
import {
useBroadcastDeviceListUpdates,
+ useBroadcastAccountDeletion,
useGetAndUpdateDeviceListsForUsers,
} from '../hooks/peer-list-hooks.js';
import {
@@ -43,13 +44,22 @@
// is already handled by the primary device
const primaryRequestLogoutOptions = Object.freeze({ skipIdentityLogOut: true });
+// When re-broadcasting, we want to do it only to foreign peers
+// to avoid a vicious circle of deletion messages sent by own devices.
+const accountDeletionBroadcastOptions = Object.freeze({
+ broadcastToOwnDevices: false,
+});
+
// handles `peerToPeerMessageTypes.ENCRYPTED_MESSAGE`
function useHandleOlmMessageToDevice() {
const identityContext = React.useContext(IdentityClientContext);
invariant(identityContext, 'Identity context should be set');
- const { identityClient } = identityContext;
+ const { identityClient, getAuthMetadata } = identityContext;
const broadcastDeviceListUpdates = useBroadcastDeviceListUpdates();
+ const reBroadcastAccountDeletion = useBroadcastAccountDeletion(
+ accountDeletionBroadcastOptions,
+ );
const allPeerDevices = useSelector(getAllPeerDevices);
const dispatchActionPromise = useDispatchActionPromise();
@@ -92,6 +102,25 @@
userActionMessage.type === userActionsP2PMessageTypes.DM_OPERATION
) {
await processDMOperation(userActionMessage.op);
+ } else if (
+ userActionMessage.type === userActionsP2PMessageTypes.ACCOUNT_DELETION
+ ) {
+ const { userID: thisUserID } = await getAuthMetadata();
+ if (!thisUserID) {
+ return;
+ }
+ // own devices re-broadcast account deletion to foreign peer devices
+ if (senderInfo.userID === thisUserID) {
+ await reBroadcastAccountDeletion();
+ // we treat account deletion the same way as primary-device-requested
+ // logout
+ void dispatchActionPromise(
+ logOutActionTypes,
+ primaryDeviceRequestedLogOut(),
+ );
+ } else {
+ // TODO: update peer list
+ }
} else {
console.warn(
'Unsupported P2P user action message:',
@@ -103,9 +132,11 @@
allPeerDevices,
broadcastDeviceListUpdates,
dispatchActionPromise,
+ getAuthMetadata,
identityClient,
primaryDeviceRequestedLogOut,
processDMOperation,
+ reBroadcastAccountDeletion,
],
);
}

File Metadata

Mime Type
text/plain
Expires
Sat, Sep 21, 1:58 AM (21 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2154828
Default Alt Text
D12945.id43105.diff (2 KB)

Event Timeline