diff --git a/app/sql.js b/app/sql.js index 086100c5b..301956921 100644 --- a/app/sql.js +++ b/app/sql.js @@ -810,6 +810,7 @@ const LOKI_SCHEMA_VERSIONS = [ updateToLokiSchemaVersion4, updateToLokiSchemaVersion5, updateToLokiSchemaVersion6, + updateToLokiSchemaVersion7, ]; async function updateToLokiSchemaVersion1(currentVersion, instance) { @@ -1027,6 +1028,30 @@ async function updateToLokiSchemaVersion6(currentVersion, instance) { console.log('updateToLokiSchemaVersion6: success!'); } +async function updateToLokiSchemaVersion7(currentVersion, instance) { + if (currentVersion >= 7) { + return; + } + + console.log('updateToLokiSchemaVersion7: starting...'); + + await instance.run('BEGIN TRANSACTION;'); + + // Remove multi device data + await instance.run('DELETE FROM pairingAuthorisations;'); + + await instance.run( + `INSERT INTO loki_schema ( + version + ) values ( + 7 + );` + ); + + await instance.run('COMMIT TRANSACTION;'); + console.log('updateToLokiSchemaVersion7: success!'); +} + async function updateLokiSchema(instance) { const result = await instance.get( "SELECT name FROM sqlite_master WHERE type = 'table' AND name='loki_schema';" diff --git a/js/background.js b/js/background.js index 67c556030..ff7a7357e 100644 --- a/js/background.js +++ b/js/background.js @@ -300,6 +300,12 @@ storage.put('primaryDevicePubKey', textsecure.storage.user.getNumber()); } + // 4th August 2020 - Force wipe of secondary devices as multi device is being disabled. + if (storage.get('isSecondaryDevice')) { + await window.deleteAccount(); + return; + } + // These make key operations available to IPC handlers created in preload.js window.Events = { getThemeSetting: () => 'dark', // storage.get('theme-setting', 'dark') @@ -803,27 +809,6 @@ // Get memberlist. This function is not accurate >> // window.getMemberList = window.lokiPublicChatAPI.getListOfMembers(); - window.deleteAccount = async () => { - try { - window.log.info('Deleting everything!'); - - const { Logs } = window.Signal; - await Logs.deleteAll(); - - await window.Signal.Data.removeAll(); - await window.Signal.Data.close(); - await window.Signal.Data.removeDB(); - - await window.Signal.Data.removeOtherData(); - } catch (error) { - window.log.error( - 'Something went wrong deleting all data:', - error && error.stack ? error.stack : error - ); - } - window.restart(); - }; - window.toggleTheme = () => { const theme = window.Events.getThemeSetting(); const updatedTheme = theme === 'dark' ? 'light' : 'dark'; diff --git a/js/modules/loki_file_server_api.js b/js/modules/loki_file_server_api.js index 8956c7f21..9287875c9 100644 --- a/js/modules/loki_file_server_api.js +++ b/js/modules/loki_file_server_api.js @@ -218,6 +218,10 @@ class LokiHomeServerInstance extends LokiFileServerInstance { } async updateOurDeviceMapping() { + if (!window.lokiFeatureFlags.useMultiDevice) { + return undefined; + } + const isPrimary = !storage.get('isSecondaryDevice'); const authorisations = await window.libsession.Protocols.MultiDeviceProtocol.getPairingAuthorisations( this.ourKey diff --git a/preload.js b/preload.js index 9bb88c0eb..49b3ec0a9 100644 --- a/preload.js +++ b/preload.js @@ -504,3 +504,24 @@ const { } = require('./ts/util/blockedNumberController'); window.BlockedNumberController = BlockedNumberController; + +window.deleteAccount = async () => { + try { + window.log.info('Deleting everything!'); + + const { Logs } = window.Signal; + await Logs.deleteAll(); + + await window.Signal.Data.removeAll(); + await window.Signal.Data.close(); + await window.Signal.Data.removeDB(); + + await window.Signal.Data.removeOtherData(); + } catch (error) { + window.log.error( + 'Something went wrong deleting all data:', + error && error.stack ? error.stack : error + ); + } + window.restart(); +}; diff --git a/ts/test/session/protocols/MultiDeviceProtocol_test.ts b/ts/test/session/protocols/MultiDeviceProtocol_test.ts index e1d248121..1a5dd8220 100644 --- a/ts/test/session/protocols/MultiDeviceProtocol_test.ts +++ b/ts/test/session/protocols/MultiDeviceProtocol_test.ts @@ -25,6 +25,13 @@ function generateFakeAuthorisations( describe('MultiDeviceProtocol', () => { const sandbox = sinon.createSandbox(); + beforeEach(() => { + // Enable multidevice for tests + TestUtils.stubWindow('lokiFeatureFlags', { + useMultiDevice: true, + }); + }); + afterEach(() => { TestUtils.restoreStubs(); sandbox.restore(); diff --git a/ts/window.d.ts b/ts/window.d.ts index 41031dde8..d6b245677 100644 --- a/ts/window.d.ts +++ b/ts/window.d.ts @@ -52,15 +52,15 @@ declare global { libsignal: LibsignalProtocol; log: any; lokiFeatureFlags: { - multiDeviceUnpairing: boolean, - privateGroupChats: boolean, - useSnodeProxy: boolean, - useOnionRequests: boolean, - useFileOnionRequests: boolean, - enableSenderKeys: boolean, - onionRequestHops: number, - debugMessageLogs: boolean, - useMultiDevice: boolean, + multiDeviceUnpairing: boolean; + privateGroupChats: boolean; + useSnodeProxy: boolean; + useOnionRequests: boolean; + useFileOnionRequests: boolean; + enableSenderKeys: boolean; + onionRequestHops: number; + debugMessageLogs: boolean; + useMultiDevice: boolean; }; lokiFileServerAPI: LokiFileServerInstance; lokiMessageAPI: LokiMessageInterface;