Request configuration sync on startup of new version
This commit is contained in:
parent
f5954db711
commit
313d08344a
6 changed files with 17 additions and 243 deletions
|
@ -698,19 +698,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
const deviceId = textsecure.storage.user.getDeviceId();
|
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') {
|
if (firstRun === true && deviceId !== '1') {
|
||||||
const hasThemeSetting = Boolean(storage.get('theme-setting'));
|
const hasThemeSetting = Boolean(storage.get('theme-setting'));
|
||||||
if (!hasThemeSetting && textsecure.storage.get('userAgent') === 'OWI') {
|
if (!hasThemeSetting && textsecure.storage.get('userAgent') === 'OWI') {
|
||||||
|
|
|
@ -9,7 +9,6 @@ const IndexedDB = require('./indexeddb');
|
||||||
const Notifications = require('../../ts/notifications');
|
const Notifications = require('../../ts/notifications');
|
||||||
const OS = require('../../ts/OS');
|
const OS = require('../../ts/OS');
|
||||||
const Settings = require('./settings');
|
const Settings = require('./settings');
|
||||||
const Startup = require('./startup');
|
|
||||||
const Util = require('../../ts/util');
|
const Util = require('../../ts/util');
|
||||||
const { migrateToSQL } = require('./migrate_to_sql');
|
const { migrateToSQL } = require('./migrate_to_sql');
|
||||||
const Metadata = require('./metadata/SecretSessionCipher');
|
const Metadata = require('./metadata/SecretSessionCipher');
|
||||||
|
@ -233,7 +232,6 @@ exports.setup = (options = {}) => {
|
||||||
OS,
|
OS,
|
||||||
RefreshSenderCertificate,
|
RefreshSenderCertificate,
|
||||||
Settings,
|
Settings,
|
||||||
Startup,
|
|
||||||
Types,
|
Types,
|
||||||
Util,
|
Util,
|
||||||
Views,
|
Views,
|
||||||
|
|
|
@ -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',
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -28,7 +28,11 @@
|
||||||
ourNumber,
|
ourNumber,
|
||||||
{ syncMessage: true }
|
{ 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))
|
wrap(sender.sendRequestContactSyncMessage(sendOptions))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
window.log.info('SyncRequest now sending group sync messsage...');
|
window.log.info('SyncRequest now sending group sync messsage...');
|
||||||
|
|
|
@ -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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -244,7 +244,7 @@
|
||||||
"rule": "jQuery-wrap(",
|
"rule": "jQuery-wrap(",
|
||||||
"path": "js/background.js",
|
"path": "js/background.js",
|
||||||
"line": " wrap(",
|
"line": " wrap(",
|
||||||
"lineNumber": 740,
|
"lineNumber": 727,
|
||||||
"reasonCategory": "falseMatch",
|
"reasonCategory": "falseMatch",
|
||||||
"updated": "2018-10-18T22:23:00.485Z"
|
"updated": "2018-10-18T22:23:00.485Z"
|
||||||
},
|
},
|
||||||
|
@ -252,7 +252,7 @@
|
||||||
"rule": "jQuery-wrap(",
|
"rule": "jQuery-wrap(",
|
||||||
"path": "js/background.js",
|
"path": "js/background.js",
|
||||||
"line": " await wrap(",
|
"line": " await wrap(",
|
||||||
"lineNumber": 1270,
|
"lineNumber": 1257,
|
||||||
"reasonCategory": "falseMatch",
|
"reasonCategory": "falseMatch",
|
||||||
"updated": "2018-10-26T22:43:23.229Z"
|
"updated": "2018-10-26T22:43:23.229Z"
|
||||||
},
|
},
|
||||||
|
@ -379,14 +379,6 @@
|
||||||
"reasonCategory": "falseMatch",
|
"reasonCategory": "falseMatch",
|
||||||
"updated": "2018-09-19T18:13:29.628Z"
|
"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-$(",
|
"rule": "jQuery-$(",
|
||||||
"path": "js/permissions_popup_start.js",
|
"path": "js/permissions_popup_start.js",
|
||||||
|
@ -2372,11 +2364,19 @@
|
||||||
"reasonCategory": "falseMatch",
|
"reasonCategory": "falseMatch",
|
||||||
"updated": "2018-09-19T18:13:29.628Z"
|
"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(",
|
"rule": "jQuery-wrap(",
|
||||||
"path": "libtextsecure/sync_request.js",
|
"path": "libtextsecure/sync_request.js",
|
||||||
"line": " wrap(sender.sendRequestContactSyncMessage(sendOptions))",
|
"line": " wrap(sender.sendRequestContactSyncMessage(sendOptions))",
|
||||||
"lineNumber": 32,
|
"lineNumber": 36,
|
||||||
"reasonCategory": "falseMatch",
|
"reasonCategory": "falseMatch",
|
||||||
"updated": "2018-10-05T23:12:28.961Z"
|
"updated": "2018-10-05T23:12:28.961Z"
|
||||||
},
|
},
|
||||||
|
@ -2384,7 +2384,7 @@
|
||||||
"rule": "jQuery-wrap(",
|
"rule": "jQuery-wrap(",
|
||||||
"path": "libtextsecure/sync_request.js",
|
"path": "libtextsecure/sync_request.js",
|
||||||
"line": " return wrap(sender.sendRequestGroupSyncMessage(sendOptions));",
|
"line": " return wrap(sender.sendRequestGroupSyncMessage(sendOptions));",
|
||||||
"lineNumber": 35,
|
"lineNumber": 39,
|
||||||
"reasonCategory": "falseMatch",
|
"reasonCategory": "falseMatch",
|
||||||
"updated": "2018-10-05T23:12:28.961Z"
|
"updated": "2018-10-05T23:12:28.961Z"
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue