Page MenuHomePhorge

D14950.1765072067.diff
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

D14950.1765072067.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
@@ -10,6 +10,7 @@
import { removePeerUsersActionType } from '../actions/aux-user-actions.js';
import { invalidateTunnelbrokerDeviceTokenActionType } from '../actions/tunnelbroker-actions.js';
import { logOutActionTypes, useBaseLogOut } from '../actions/user-actions.js';
+import { useUserDataRestore } from '../backup/use-user-data-restore.js';
import {
logTypes,
type OlmDebugLog,
@@ -58,6 +59,7 @@
import { getClientMessageIDFromTunnelbrokerMessageID } from '../utils/peer-to-peer-communication-utils.js';
import { useDispatchActionPromise } from '../utils/redux-promise-utils.js';
import { useDispatch, useSelector } from '../utils/redux-utils.js';
+import { fullBackupSupport } from '../utils/services-utils.js';
// When logout is requested by primary device, logging out of Identity Service
// is already handled by the primary device
@@ -94,6 +96,9 @@
const runDeviceListUpdate = useDeviceListUpdate();
const processDMOperation = useProcessDMOperation();
+ const userDataRestore = useUserDataRestore();
+ const restoreBackupState = useSelector(state => state.restoreBackupState);
+ const username = useSelector(state => state.currentUserInfo?.username);
return React.useCallback(
async (
@@ -170,6 +175,44 @@
});
await sqliteAPI.removeInboundP2PMessages([messageID]);
}
+ } else if (
+ userActionMessage.type === userActionsP2PMessageTypes.BACKUP_DATA
+ ) {
+ if (!fullBackupSupport) {
+ console.warn(
+ 'Received backup data but this device is not supporting UserData backup',
+ );
+ return;
+ }
+
+ if (restoreBackupState.status !== 'no_backup') {
+ console.warn(
+ 'Received backup data but backup action was already dispatched',
+ );
+ await sqliteAPI.removeInboundP2PMessages([messageID]);
+ return;
+ }
+
+ const { userID, backupData } = userActionMessage;
+ const { userID: currentUserID, accessToken } = await getAuthMetadata();
+
+ if (userID !== currentUserID) {
+ console.warn('Received backup data from wrong user');
+ await sqliteAPI.removeInboundP2PMessages([messageID]);
+ return;
+ }
+
+ if (!username || !accessToken) {
+ return;
+ }
+
+ await userDataRestore(backupData, {
+ userID,
+ accessToken,
+ username,
+ });
+
+ await sqliteAPI.removeInboundP2PMessages([messageID]);
} else {
console.warn(
'Unsupported P2P user action message:',
@@ -184,7 +227,10 @@
primaryDeviceRequestedLogOut,
processDMOperation,
reBroadcastAccountDeletion,
+ restoreBackupState.status,
runDeviceListUpdate,
+ userDataRestore,
+ username,
],
);
}

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 1:47 AM (7 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5842024
Default Alt Text
D14950.1765072067.diff (3 KB)

Event Timeline