diff --git a/lib/actions/aux-user-actions.js b/lib/actions/aux-user-actions.js --- a/lib/actions/aux-user-actions.js +++ b/lib/actions/aux-user-actions.js @@ -8,9 +8,12 @@ const setPeerDeviceListsActionType = 'SET_PEER_DEVICE_LISTS'; +const removeAllPeerDeviceListsActionType = 'REMOVE_ALL_PEER_DEVICE_LISTS'; + export { setAuxUserFIDsActionType, addAuxUserFIDsActionType, clearAuxUserFIDsActionType, setPeerDeviceListsActionType, + removeAllPeerDeviceListsActionType, }; diff --git a/lib/hooks/qr-auth.js b/lib/hooks/qr-auth.js --- a/lib/hooks/qr-auth.js +++ b/lib/hooks/qr-auth.js @@ -3,6 +3,7 @@ import invariant from 'invariant'; import * as React from 'react'; +import { removeAllPeerDeviceListsActionType } from '../actions/aux-user-actions.js'; import { IdentityClientContext } from '../shared/identity-client-context.js'; import { useTunnelbroker } from '../tunnelbroker/tunnelbroker-context.js'; import type { BackupKeys } from '../types/backup-types.js'; @@ -19,6 +20,7 @@ qrCodeAuthMessageTypes, type QRCodeAuthMessagePayload, } from '../types/tunnelbroker/qr-code-auth-message-types.js'; +import { useDispatch } from '../utils/redux-utils.js'; type QRAuthHandlerInput = { +secondaryDeviceID: ?string, @@ -57,6 +59,8 @@ const identityContext = React.useContext(IdentityClientContext); const identityClient = identityContext?.identityClient; + const dispatch = useDispatch(); + React.useEffect(() => { if ( !secondaryDeviceID || @@ -124,11 +128,12 @@ qrCodeAuthMessageTypes.BACKUP_DATA_KEY_MESSAGE ) { const { backupID, backupDataKey, backupLogDataKey } = qrCodeAuthMessage; - void performBackupRestore?.({ + await performBackupRestore?.({ backupID, backupDataKey, backupLogDataKey, }); + dispatch({ type: removeAllPeerDeviceListsActionType }); return; } @@ -147,12 +152,13 @@ setUnauthorizedDeviceID(null); }, [ - setUnauthorizedDeviceID, identityClient, aesKey, performSecondaryDeviceRegistration, - performBackupRestore, + setUnauthorizedDeviceID, processMessage, + performBackupRestore, + dispatch, ], ); diff --git a/lib/reducers/aux-user-reducer.js b/lib/reducers/aux-user-reducer.js --- a/lib/reducers/aux-user-reducer.js +++ b/lib/reducers/aux-user-reducer.js @@ -5,6 +5,7 @@ addAuxUserFIDsActionType, clearAuxUserFIDsActionType, setPeerDeviceListsActionType, + removeAllPeerDeviceListsActionType, } from '../actions/aux-user-actions.js'; import { setClientDBStoreActionType } from '../actions/client-db-store-actions.js'; import { @@ -140,6 +141,22 @@ auxUserStore: processStoreOps(state, replaceOperations), auxUserStoreOperations: replaceOperations, }; + } else if (action.type === removeAllPeerDeviceListsActionType) { + const replaceOperations: ReplaceAuxUserInfoOperation[] = []; + for (const userID in state.auxUserInfos) { + const { deviceList, ...rest } = state.auxUserInfos[userID]; + replaceOperations.push({ + type: 'replace_aux_user_info', + payload: { + id: userID, + auxUserInfo: rest, + }, + }); + } + return { + auxUserStore: processStoreOps(state, replaceOperations), + auxUserStoreOperations: replaceOperations, + }; } return { diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js --- a/lib/types/redux-types.js +++ b/lib/types/redux-types.js @@ -1412,6 +1412,10 @@ +type: 'SET_PEER_DEVICE_LISTS', +payload: SetPeerDeviceListsPayload, } + | { + +type: 'REMOVE_ALL_PEER_DEVICE_LISTS', + +payload?: void, + } | { +type: 'OPS_PROCESSING_FINISHED_ACTION_TYPE', +payload?: void,