From 313d08344aec88546f11597c1d1ef01d864ad681 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Wed, 28 Nov 2018 11:54:34 -0800 Subject: [PATCH] Request configuration sync on startup of new version --- js/background.js | 13 --- js/modules/signal.js | 2 - js/modules/startup.js | 65 --------------- libtextsecure/sync_request.js | 6 +- test/modules/startup_test.js | 150 ---------------------------------- ts/util/lint/exceptions.json | 24 +++--- 6 files changed, 17 insertions(+), 243 deletions(-) delete mode 100644 js/modules/startup.js delete mode 100644 test/modules/startup_test.js diff --git a/js/background.js b/js/background.js index 5270f9c7a..4b7cd9107 100644 --- a/js/background.js +++ b/js/background.js @@ -698,19 +698,6 @@ } const deviceId = textsecure.storage.user.getDeviceId(); - const ourNumber = textsecure.storage.user.getNumber(); - const { sendRequestConfigurationSyncMessage } = textsecure.messaging; - const status = await Signal.Startup.syncReadReceiptConfiguration({ - ourNumber, - deviceId, - sendRequestConfigurationSyncMessage, - storage, - prepareForSend: ConversationController.prepareForSend.bind( - ConversationController - ), - }); - window.log.info('Sync configuration status:', status); - if (firstRun === true && deviceId !== '1') { const hasThemeSetting = Boolean(storage.get('theme-setting')); if (!hasThemeSetting && textsecure.storage.get('userAgent') === 'OWI') { diff --git a/js/modules/signal.js b/js/modules/signal.js index 4f7869c31..96a05b475 100644 --- a/js/modules/signal.js +++ b/js/modules/signal.js @@ -9,7 +9,6 @@ const IndexedDB = require('./indexeddb'); const Notifications = require('../../ts/notifications'); const OS = require('../../ts/OS'); const Settings = require('./settings'); -const Startup = require('./startup'); const Util = require('../../ts/util'); const { migrateToSQL } = require('./migrate_to_sql'); const Metadata = require('./metadata/SecretSessionCipher'); @@ -233,7 +232,6 @@ exports.setup = (options = {}) => { OS, RefreshSenderCertificate, Settings, - Startup, Types, Util, Views, diff --git a/js/modules/startup.js b/js/modules/startup.js deleted file mode 100644 index e09a374d8..000000000 --- a/js/modules/startup.js +++ /dev/null @@ -1,65 +0,0 @@ -const is = require('@sindresorhus/is'); - -const Errors = require('./types/errors'); -const Settings = require('./settings'); - -exports.syncReadReceiptConfiguration = async ({ - ourNumber, - deviceId, - sendRequestConfigurationSyncMessage, - storage, - prepareForSend, -}) => { - if (!is.string(deviceId)) { - throw new TypeError('deviceId is required'); - } - if (!is.function(sendRequestConfigurationSyncMessage)) { - throw new TypeError('sendRequestConfigurationSyncMessage is required'); - } - if (!is.function(prepareForSend)) { - throw new TypeError('prepareForSend is required'); - } - - if (!is.string(ourNumber)) { - throw new TypeError('ourNumber is required'); - } - - if (!is.object(storage)) { - throw new TypeError('storage is required'); - } - - const isPrimaryDevice = deviceId === '1'; - if (isPrimaryDevice) { - return { - status: 'skipped', - reason: 'isPrimaryDevice', - }; - } - - const settingName = Settings.READ_RECEIPT_CONFIGURATION_SYNC; - const hasPreviouslySynced = Boolean(storage.get(settingName)); - if (hasPreviouslySynced) { - return { - status: 'skipped', - reason: 'hasPreviouslySynced', - }; - } - - try { - const { wrap, sendOptions } = prepareForSend(ourNumber, { - syncMessage: true, - }); - await wrap(sendRequestConfigurationSyncMessage(sendOptions)); - storage.put(settingName, true); - } catch (error) { - return { - status: 'error', - reason: 'failedToSendSyncMessage', - error: Errors.toLogFormat(error), - }; - } - - return { - status: 'complete', - }; -}; diff --git a/libtextsecure/sync_request.js b/libtextsecure/sync_request.js index ad8244cc0..cf6e51f48 100644 --- a/libtextsecure/sync_request.js +++ b/libtextsecure/sync_request.js @@ -28,7 +28,11 @@ ourNumber, { syncMessage: true } ); - window.log.info('SyncRequest created. Sending contact sync message...'); + + window.log.info('SyncRequest created. Sending config sync request...'); + wrap(sender.sendRequestConfigurationSyncMessage(sendOptions)); + + window.log.info('SyncRequest now sending contact sync message...'); wrap(sender.sendRequestContactSyncMessage(sendOptions)) .then(() => { window.log.info('SyncRequest now sending group sync messsage...'); diff --git a/test/modules/startup_test.js b/test/modules/startup_test.js deleted file mode 100644 index b4e201523..000000000 --- a/test/modules/startup_test.js +++ /dev/null @@ -1,150 +0,0 @@ -const sinon = require('sinon'); -const { assert } = require('chai'); - -const Startup = require('../../js/modules/startup'); - -describe('Startup', () => { - const sandbox = sinon.createSandbox(); - - describe('syncReadReceiptConfiguration', () => { - afterEach(() => { - sandbox.restore(); - }); - - it('should complete if user hasn’t previously synced', async () => { - const ourNumber = '+15551234567'; - const deviceId = '2'; - const sendRequestConfigurationSyncMessage = sandbox.spy(); - const storagePutSpy = sandbox.spy(); - const storage = { - get(name) { - if (name !== 'read-receipt-configuration-sync') { - return true; - } - - return false; - }, - put: storagePutSpy, - }; - const prepareForSend = () => ({ - wrap: promise => promise, - sendOptions: {}, - }); - - const expected = { - status: 'complete', - }; - - const actual = await Startup.syncReadReceiptConfiguration({ - ourNumber, - deviceId, - sendRequestConfigurationSyncMessage, - storage, - prepareForSend, - }); - - assert.deepEqual(actual, expected); - assert.equal(sendRequestConfigurationSyncMessage.callCount, 1); - assert.equal(storagePutSpy.callCount, 1); - assert(storagePutSpy.calledWith('read-receipt-configuration-sync', true)); - }); - - it('should be skipped if this is the primary device', async () => { - const ourNumber = '+15551234567'; - const deviceId = '1'; - const sendRequestConfigurationSyncMessage = () => {}; - const storage = {}; - const prepareForSend = () => ({ - wrap: promise => promise, - sendOptions: {}, - }); - - const expected = { - status: 'skipped', - reason: 'isPrimaryDevice', - }; - - const actual = await Startup.syncReadReceiptConfiguration({ - ourNumber, - deviceId, - sendRequestConfigurationSyncMessage, - storage, - prepareForSend, - }); - - assert.deepEqual(actual, expected); - }); - - it('should be skipped if user has previously synced', async () => { - const ourNumber = '+15551234567'; - const deviceId = '2'; - const sendRequestConfigurationSyncMessage = () => {}; - const storage = { - get(name) { - if (name !== 'read-receipt-configuration-sync') { - return false; - } - - return true; - }, - }; - const prepareForSend = () => ({ - wrap: promise => promise, - sendOptions: {}, - }); - - const expected = { - status: 'skipped', - reason: 'hasPreviouslySynced', - }; - - const actual = await Startup.syncReadReceiptConfiguration({ - ourNumber, - deviceId, - sendRequestConfigurationSyncMessage, - storage, - prepareForSend, - }); - - assert.deepEqual(actual, expected); - }); - - it('should return error if sending of sync request fails', async () => { - const ourNumber = '+15551234567'; - const deviceId = '2'; - - const sendRequestConfigurationSyncMessage = sandbox.stub(); - sendRequestConfigurationSyncMessage.rejects(new Error('boom')); - - const storagePutSpy = sandbox.spy(); - const storage = { - get(name) { - if (name !== 'read-receipt-configuration-sync') { - return true; - } - - return false; - }, - put: storagePutSpy, - }; - const prepareForSend = () => ({ - wrap: promise => promise, - sendOptions: {}, - }); - - const actual = await Startup.syncReadReceiptConfiguration({ - ourNumber, - deviceId, - sendRequestConfigurationSyncMessage, - storage, - prepareForSend, - }); - - assert.equal(actual.status, 'error'); - assert.include(actual.error, 'boom'); - - assert.equal(sendRequestConfigurationSyncMessage.callCount, 1); - assert.equal(storagePutSpy.callCount, 0); - }); - }); -}); diff --git a/ts/util/lint/exceptions.json b/ts/util/lint/exceptions.json index b64e9feee..20e66e4c6 100644 --- a/ts/util/lint/exceptions.json +++ b/ts/util/lint/exceptions.json @@ -244,7 +244,7 @@ "rule": "jQuery-wrap(", "path": "js/background.js", "line": " wrap(", - "lineNumber": 740, + "lineNumber": 727, "reasonCategory": "falseMatch", "updated": "2018-10-18T22:23:00.485Z" }, @@ -252,7 +252,7 @@ "rule": "jQuery-wrap(", "path": "js/background.js", "line": " await wrap(", - "lineNumber": 1270, + "lineNumber": 1257, "reasonCategory": "falseMatch", "updated": "2018-10-26T22:43:23.229Z" }, @@ -379,14 +379,6 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T18:13:29.628Z" }, - { - "rule": "jQuery-wrap(", - "path": "js/modules/startup.js", - "line": " await wrap(sendRequestConfigurationSyncMessage(sendOptions));", - "lineNumber": 52, - "reasonCategory": "falseMatch", - "updated": "2018-10-05T23:12:28.961Z" - }, { "rule": "jQuery-$(", "path": "js/permissions_popup_start.js", @@ -2372,11 +2364,19 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T18:13:29.628Z" }, + { + "rule": "jQuery-wrap(", + "path": "libtextsecure/sync_request.js", + "line": " wrap(sender.sendRequestConfigurationSyncMessage(sendOptions));", + "lineNumber": 33, + "reasonCategory": "falseMatch", + "updated": "2018-11-28T19:48:16.607Z" + }, { "rule": "jQuery-wrap(", "path": "libtextsecure/sync_request.js", "line": " wrap(sender.sendRequestContactSyncMessage(sendOptions))", - "lineNumber": 32, + "lineNumber": 36, "reasonCategory": "falseMatch", "updated": "2018-10-05T23:12:28.961Z" }, @@ -2384,7 +2384,7 @@ "rule": "jQuery-wrap(", "path": "libtextsecure/sync_request.js", "line": " return wrap(sender.sendRequestGroupSyncMessage(sendOptions));", - "lineNumber": 35, + "lineNumber": 39, "reasonCategory": "falseMatch", "updated": "2018-10-05T23:12:28.961Z" },